我有一个生成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()
会遇到同样的问题。
答案 0 :(得分:1)
将您的方法更改为而不是生成ByteArrayOutputStream
。技术很差,不能扩展。将其传递给OutputStream
或WriteableByteChannel
,然后让它写出自己的输出。
答案 1 :(得分:0)
您可以从另一端尝试:不是将ByteArrayOutputStream
打包到频道中,而是将FileChannel
打包到OutputStream
,并通过调用out.writeTo
来完成写入}:
ByteArrayOutputStream baos = MyClass.myMethod1();
FileChannel channel = MyClass.myMethod2();
OutputStream out = Channels.newOutputStream(channel);
out.writeTo(baos);