![](/img/trans.png)
[英]Does IOUtils.toByteArray(inputStream) method internally close inputStream object?
[英]IOUtils.ToByteArray(InputStream) is thread safe?
使用IOUtils.ToByteArray
會導致並發問題嗎?
private byte[] saveLetterContent(InputStream input) {
...
byte[] letterContent = IOUtils.toByteArray(input);
...
}
我的意思是這個方法中的letterContent
是否可能由於並發而錯誤地更改?
我的意思是這個方法中的 letterContent 是否可能由於並發而錯誤地更改?
當然,在不保護輸入的InputStream
的情況下調用toByteArray(InputStream)
會導致未定義的行為。 這也很容易證明。
final String value = "hello! ciao!";
final byte[] valueBytes = value.getBytes(StandardCharsets.UTF_8);
System.out.println(valueBytes.length);
final ByteArrayInputStream is = new ByteArrayInputStream(valueBytes);
new Thread(() -> {
try {
is.read(new byte[10]);
} catch (final IOException e) {
//
}
}).start();
// Thread.sleep(50)
final byte[] bytes = IOUtils.toByteArray(is);
System.out.println(bytes.length);
對於上面的示例,您肯定會注意到第二個System.out
將打印比第一個更低的字節長度。 你甚至可以玩Thread.sleep
看看會發生什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.