13

我可以将任何 InputStream 写入 FileChannel 吗?

我正在使用 java.nio.channels.FileChannel 打开文件并将其锁定,然后将 InputStream 写入输出文件。InputStream 可能被另一个文件、URL、套接字或任何东西打开。我写了以下代码:

FileOutputStream outputStream = new FileOutputStream(outputFile);
FileChannel outputChannel = outputStream.getChannel();
FileLock lock = outputChannel.lock();
try {
    outputChannel.transferFrom(???);
} finally {
    lock.release();
    outputChannel.close();
    outputStream.close();
}

但是, outputChannel.transferFrom(...) 的第一个参数请求一个 ReadableByteChannel 对象。由于我使用 InputStream 作为输入,因此它没有 inputStream.getChannel() 方法来创建所需的通道。

有什么方法可以从 InputStream 中获取 ReadableByteChannel 吗?

4

2 回答 2

28
Channels.newChannel(InputStream in)

http://docs.oracle.com/javase/7/docs/api/java/nio/channels/Channels.html

于 2011-07-08T02:59:24.080 回答
9

您可以使用 ReadableByteChannel readableChannel = Channels.newChannel(myinputstream)。

于 2011-07-08T03:04:12.653 回答