我想将输入流转换为字节数组。我知道我可以使用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/

10-10 05:49