NIO与Socket笔记 : 通道和 FileChannel 类的使用
在 NIO 技术中,要将操作的数据打包到缓冲区中,而缓冲区中的数据想要传输到目的 地是要依赖于通道的 。
缓冲区是将数据进行打包,而通道是将数据进行传输,可见两者是形 影不离的 。
NIO 技术中的数据要放在缓 冲 区中进行管理,再使用通道将缓冲区中的数据传输到目的地 。
从缓冲区和通道的数据类型可以发现,缓冲区都是类,而通道都是接口,这是由于通道的功能实现是要依赖于操作系统的,
Channel 接口只定义有哪些功能,而功能的具体实现 在不同的操作系统中是不一样的,
因此 ,在 JDK 中, 通道被设计成接口数据类型 。
子接口: 11个
AsynchronousByteChannel : 使通道支持异步 I/O 操作, 操作单位为字节 。
AsynchronousChannel : 使通道支持异步 I/O 操作
ByteChannel : 将 ReadableByteChannel (可读字节通道)与 WritableByte Channel (可写字节通道)的规范进行了统一,
也就是 ByteChannel接口的父接口就是 Readable ByteChannel 和 WritableByteChannel
GatheringByteChannel : 将 多个缓冲区中的数据写入到通道 中 。
InterruptibleChannel : 使通道能以异步的方式进行关闭与中断 。
MulticastChannel : 使通道支持 Internet Protocol ( IP)多播 。
IP 多播就 是将多个主机地址进行打包,形成一个组( group),然后将 IP 报文向这个组进行发送,
也就相当于同时向多个主机传输数据。
NetworkChannel : 使通道与 Socket进行关联,使通道中的数据能在 Socket技术上进行传输 。
ReadableByteChannel : 使通道允许对字节进行读操作 。
ScatteringByteChannel : 可以从通道中读取字节到多个缓冲区中 。
SeekableByteChannel : 在字节通道中维护 position (位置),以及允许 position 发生改变 。
WritableByteChannel : 使通道允许对字节进行写操作 。
实现类:
AbstractInterruptibleChannel : 是提供了 一个可以被中断的通道基本实现类 。
AsynchronousServerSocketChannel :
FileChannel : 读取 、写入、映射和操作文件的通道。 该通道永远是阻塞 的操作 。