为什么要从InputStream/OutputStream创建NIO FileChannels

3

Java中的FileChannel实现了ReadableByteChannel和WritableByteChannel接口,使它们成为双向的。

问题:

要创建FileChannel,我需要FileInputStream(用于读取)和FileOutputStream(用于写入)。这不是违背了使它们双向的目的吗?因为我需要实例化两个流?

跟进问题:

我在许多地方看到引用,称java.io是面向流的,而java.nio是面向块的(这里)。那么为什么它们通过InputStream和OutputStream进行实例化?块导向的概念只是对流的抽象吗?


你可以通过 InputStreamOutputStream 获取它们,一些流实现将提供专门用于块导向 IO 的优化通道,而一些流实现将只使用在流之上构建的简单默认值。 - Louis Wasserman
1个回答

5

要创建FileChannel,我需要FileInputStream(用于读取)和FileOutputStream(用于写入)。

不需要。您可以使用 FileChannel.open(Path,OpenOption ...)

Path path = ...;
FileChannel channel = FileChannel.open(path, options)
channel.read(byteBuffer);
channel.write(byteBuffer);

点击这里查看您的后续问题的答案。


感谢您的回复。我检查了FileInputStream.java的代码,它在内部调用FileChannel.open()来创建一个FileChannel。 - Chander Shivdasani

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