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

时间:2015-06-12 21:02:42

标签: java nio filechannel bytearrayoutputstream

我有一个生成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 :(得分:1)

将您的方法更改为而不是生成ByteArrayOutputStream。技术很差,不能扩展。将其传递给OutputStreamWriteableByteChannel,然后让它写出自己的输出。

答案 1 :(得分:0)

您可以从另一端尝试:不是将ByteArrayOutputStream打包到频道中,而是将FileChannel打包到OutputStream,并通过调用out.writeTo来完成写入}:

ByteArrayOutputStream baos = MyClass.myMethod1();
FileChannel channel = MyClass.myMethod2();
OutputStream out = Channels.newOutputStream(channel);
out.writeTo(baos);