Java NIO 通道:全面解析与应用实践
1. 通道基础概念
1.1 通道的方向性
通道可分为单向和双向两种。单向通道只能实现数据的单向传输,而双向通道则可以在两个方向上传输数据。以下是相关接口的定义:
public interface ByteChannel
extends ReadableByteChannel, WritableByteChannel
{
}
ByteChannel
接口继承了 ReadableByteChannel
和 WritableByteChannel
,它没有声明新的 API 方法,只是将这两个接口聚合在一个新名称下,方便类的定义和使用 instanceof
运算符进行通道对象的测试。
1.2 通道操作的约束
一个通道实例的能力会受到其所连接的 I/O 服务特性的约束。例如,通过 FileInputStream
的 getChannel()
方法获得的 FileChannel
对象虽然实现了 ByteChannel
接口,但由于文件是以只读权限打开的,调用其 write()
方法会抛出 NonWritableChannelException
。示例代码如下: