我想将输入流转换为字节数组。我知道我可以使用commons-io的IOUtils。但是我正在用Java io练习一些基础知识。我使用BufferedReader读取了一个xml文件,并尝试使用BufferedWriter将其写入ByteArrayOutputStream。但是它不起作用。
当我直接写入ByteArrayOutputStream时,它的工作原理。我的代码有什么问题?
try (InputStream inputStream = getClass().getResourceAsStream(
"/productInventory.xml");
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(
new OutputStreamWriter(arrayOutputStream));
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(inputStream));) {
String line = "";
while ((line = bufferedReader.readLine()) != null) {
bufferedWriter.write(line);
}
System.out.println(arrayOutputStream.size());
} catch (IOException e) {
e.printStackTrace();
}
当我在循环中包括以下行时
arrayOutputStream.write(line.getBytes(), 0, line.getBytes().length);
使用BufferedWriter有什么问题?
最佳答案
没错-只是缓冲! :D
BufferedWriter的工作原理是将您发送到缓冲区的所有内容过滤到缓冲区中-当缓冲区已满,或者关闭或刷新编写器时(这是一个Closeable,因此您应该绝对将其关闭),它将这些缓冲字符发送到基础作家。
如果要查看基础编写器更新,则必须执行以下任一操作:
1)填满缓冲区(Java中的默认大小为8k)
2)呼叫.flush()
3)拨打.close()
4)如评论中所述,您可以使用try-with-resources来使close隐式:
try (BufferedWriter writer = new BufferedWriter(underlyingWriter)) {
// doStuff
}
关于java - BufferedWriter没有写入ByteArrayOutputStream,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20393150/