java BufferedWriter未写入ByteArrayOutputStream
我想将输入流转换为字节数组。我知道我可以使用commons io中的IOUTIL。但我正在练习java io的一些基础知识。我使用BufferedReader读取xml文件,并尝试使用BufferedWriter将其写入ByteArrayOutputStream。但它不起作用
当我直接向ByteArrayoutPuttstream写入时,它会工作。我的代码有什么问题
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时有什么问题
# 1 楼答案
没什么问题,只是缓冲而已D
BufferedWriter的工作原理是将您发送到它的所有内容过滤到一个缓冲区中——当缓冲区已满,或当写入程序关闭或刷新时(它是可关闭的,所以您应该绝对关闭它),它会将这些缓冲字符发送到底层写入程序
如果要查看基础writer更新,必须:
1)填充缓冲区(Java中默认大小为8k)
2)呼叫
.flush()
3)打电话
.close()
4)如评论中所述,您可以尝试使用资源来隐藏关闭: