使用NIO FileChannel将ByteArrayOutputStream的内容写入文件

4

我有一个生成ByteArrayOutputStream的方法,我想使用FileChannel将这些内容放入文件中。使用FileOutputStream,我可以这样做:

ByteArrayOutputStream baos = MyClass.myMethod(); // get my stream
FileOutputStream out = new FileOutputStream("somefile"); // I want to write to "somefile"
out.writeTo(baos); // write

如何使用FileChannel实现此功能?我知道可以将baos转换为字节数组,然后将其转换为ByteBuffer,最后使用FileChannel.write()写入数据。但这意味着需要将流的内容倒入内存中,而且它相当大。
除非我错了,否则将ByteArrayOutputStream转换为某种类型的InputStream,然后使用Channels.newChannel(InputStream in),最后使用FileChannel.transferFrom()将遇到同样的问题。
2个回答

0
你可以尝试从另一个角度来解决问题:不要将ByteArrayOutputStream包装成通道,而是将你的FileChannel包装成OutputStream,并通过调用out.writeTo来完成写入。
ByteArrayOutputStream baos = MyClass.myMethod1();
FileChannel channel = MyClass.myMethod2();
OutputStream out = Channels.newOutputStream(channel);
out.writeTo(baos);

0

修改你的方法,不要生成一个 ByteArrayOutputStream。这是一种糟糕的技术,而且不具备可扩展性。传递一个 OutputStream 或者 WriteableByteChannel,并让它自己写入输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接