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

标签 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() 会遇到同样的问题。

最佳答案

您可以从另一端尝试:不是将 ByteArrayOutputStream 包装到一个 channel 中,您可以将您的 FileChannel 包装到 OutputStream 中,并且通过调用 out.writeTo 完成写入:

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

关于java - 使用 NIO FileChannel 将 ByteArrayOutputStream 的内容写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30812115/

相关文章:

java - 是否有必要关闭一个 Netty ChunkedInput?

java - 如何锁定其他线程的文件

java - 在 debain 6.0.1 亚马逊 EC2 实例中安装 selenium webdriver

java - 从Java代码的顶部返回,如何实现?

java - ImageView旋转+填屏

java - Netty 的 ChannelBuffer.read 出现奇怪的 indexOutOfBound 错误?

Java 7 watchservice 获取文件更改偏移量

java - 如果无论如何都会抛出 OverlappingFileLockException,那么在 FileChannel.lock 中等待的目的是什么?

java - 如何使用Java FileChannel复制保留时间戳

java - 无法在 JRE 8 中加载字体