有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    没什么问题,只是缓冲而已D

    BufferedWriter的工作原理是将您发送到它的所有内容过滤到一个缓冲区中——当缓冲区已满,或当写入程序关闭或刷新时(它是可关闭的,所以您应该绝对关闭它),它会将这些缓冲字符发送到底层写入程序

    如果要查看基础writer更新,必须:

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

    2)呼叫.flush()

    3)打电话.close()

    4)如评论中所述,您可以尝试使用资源来隐藏关闭:

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