【问题标题】:BufferedWriter is not writing to ByteArrayOutputStreamBufferedWriter 未写入 ByteArrayOutputStream
【发布时间】:2013-12-05 06:37:01
【问题描述】:

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

【问题讨论】:

    标签: java java-io


    【解决方案1】:

    没什么问题 - 只是在缓冲! :D

    BufferedWriter 的工作原理是将您发送到其中的所有内容过滤到缓冲区中 - 当缓冲区已满,或者当编写器关闭或刷新时(它是可关闭的,因此您应该绝对关闭它),它会发送那些缓冲字符到底层写入器。

    如果您想查看底层编写器更新,您必须:

    1) 填满缓冲区(Java 中默认大小为 8k)

    2) 致电.flush()

    3) 致电.close()

    4) 如 cmets 中所述,您可以使用 try-with-resources 来使 close 隐式:

    try (BufferedWriter writer = new BufferedWriter(underlyingWriter)) {
      // doStuff
    }
    

    【讨论】:

    • 或者使用 try-with-resources 语句自动执行最后一个。
    • 我调用了flush()。它就像一个魅力。我的文件大小是 6k。你说默认大小是8k。那么如果我有一个 10k 的文件并且我不调用 flush() 怎么办。它只会将前 8k 写入 ByteArrayOutputStream 吗?
    • 不,它会执行两次写入 - 当缓冲区填满时,一次写入 8k,当您调用 flush() 时,第二次写入 2k -(或者,close(),这是更好的做法)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    相关资源
    最近更新 更多