0

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

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

...

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

提前致谢。此致。

4

2 回答 2

2

这取决于您要执行的操作。

如果您将一堆数据写入文件然后读取文件,您将需要使用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());
于 2021-06-29T18:59:43.973 回答
0

简短的回答:你不能。

AByteArrayInputStream只是不能从 a 分配OutputStreamWriter

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

    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);
于 2021-06-29T18:48:16.697 回答