Java NIO学习笔记(三)Channel
程序员文章站
2024-02-16 10:29:04
...
概述:
Channel(通道)在前面也提到过,是NIO的三大组件之一,相当于BIO中的流,不一样的是,通道是双向的、可异步的、读写必须经过缓冲区的。二流是单向、同步的。
Channel的一些实现:
FileChannel(读写文件)
DatagramChannel(UDP)
SocketChannel(TCP客户端)
ServerSocketChannel(TCP服务器端)
Scatter 分散:
将通道中的数据分散的写入到Buffer中。
举个栗子:
消息头、消息体。
ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body = ByteBuffer.allocate(1024);
ByteBuffer[] bufferArray = { header, body };
channel.read(bufferArray);
这会将数据按顺序写入,但是不适合传输动态消息(因为大小不固定)
Gather 聚合:
将多个Buffer读取到一个通道中。
举个栗子:
ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body = ByteBuffer.allocate(1024);
ByteBuffer[] bufferArray = { header, body };
channel.write(bufferArray);
Gather可以传输动态的消息。
如果两个通道中有一个是FileChannel就可以直接从一个通道传输到另一个通道
通过transferFrom()、transferTo()方法、但是SocketChannel只能传输此刻已经准备好的数据。
上一篇: java使用dom4j操作xml示例代码
下一篇: Windows搜索的探索-----001