gpt4 book ai didi

java - BufferedWriter 没有写入 ByteArrayOutputStream

转载 作者:行者123 更新时间:2023-11-29 06:36:06 24 4
gpt4 key购买 nike

我想将输入流转换为字节数组。我知道我可以使用来自 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 (BufferedWriter writer = new BufferedWriter(underlyingWriter)) {
// doStuff
}

关于java - BufferedWriter 没有写入 ByteArrayOutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20393150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com