【问题标题】:Java OutStreamWriter to ByteArrayInputStreamJava OutStreamWriter 到 ByteArrayInputStream
【发布时间】:2021-06-29 18:31:19
【问题描述】:

我正在一个非常旧的 Java 应用程序中编写一个 csv 文件,所以我不能使用所有新的 Java 8 流。

Writer writer = new OutputStreamWriter(new FileOutputStream("file.csv"));
writer.append("data,");
writer.append("data,");

...

然后我需要将 writer 对象转换为 ByteArrayInputStream。 我该怎么做?

提前致谢。 最好的问候。

【问题讨论】:

  • 您可以写入 byteareayoutputsteam 并从其字节中制作 bytearrayinputstream。

标签: java outputstream bytearrayinputstream


【解决方案1】:

这取决于你想做什么。

如果您将一堆数据写入文件然后读取文件,您将需要使用FileInputStream 代替您的ByteArrayInputStream

如果你想将一堆数据写入字节数组,那么你应该看看使用ByteArrayOutputStream。如果您随后需要将字节数组读取为ByteArrayInputStream,您可以将 ByteArrayOutputStream 传递到输入流中,如下所示。请记住,这只适用于写作和阅读。你不能像缓冲区一样使用它。

//Create output stream
ByteArrayOutputStream out = new ByteArrayOutputStream();
//Create Writer
Writer writer = new OutputStreamWriter(out);

//Write stuff
...

//Close writer 
writer.close();

//Create input stream using the byte array from out as input.
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());

【讨论】:

    【解决方案2】:

    简短的回答:你不能。

    ByteArrayInputStream 不能从 OutputStreamWriter 分配。

    由于您可能在写入之后,您可以将文件读回byte[],然后用它构造一个ByteArrayInputStream

        File file = new File("S:\\Test.java");
        FileInputStream fis = new FileInputStream(file);
        byte[] content = new byte[(int) file.length()];
        fis.read(content,0,content.length);
        ByteArrayInputStream bais = new ByteArrayInputStream(content);
    

    【讨论】:

    • 虽然没有必要使用文件 - OutputStreamWriter 可以包装一个 ByteArrayOutputStream,然后 OP 可以从该数据构造一个 ByteArrayInputStream
    • @JonSkeet 我相信 OP 想先写入文件。否则他的 sn-p 就没有多大意义了。如果 OP 不需要文件,他可能最好只使用 StringBuilder 来构建 CSV,然后获取字符串的字节。
    • 也许……说实话,这很难说。如果他们实际上不需要文件,希望这个评论线程对 OP 有用......(实际上,Ryan Williams 的回答很好地涵盖了所有这些。)
    猜你喜欢
    • 2016-06-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    相关资源
    最近更新 更多