Java NIO中的通道详解!分析说明通道Channel的特点和具体实现

Java NIO 通道

Channel的特点

  • Java NIO的通道的特点:
    • 既可以从通道中读取数据,又可以写数据到通道,通道的读写是双向的
    • 通道可以异步读写
    • 通道中的数据总是要先读到一个Buffer, 或者是从一个Buffer写入

Channel的实现

  • Java NIO的通道的重要实现:
    • FileChannel: 从文件中读取数据
    • DatagramChannel: 通过UDP读取网络中的数据
    • SocketChannel: 通过TCP读取网络中的数据
    • ServerSocketChannel: 可以监听新进来的TCP连接,对每一个新进来的连接都会创建一个SocketChannel

Channel实例

  • 使用FileChannel读取数据到Buffer中:
RandomAccessFile file = new RandomAccessFile("data/nio-data.txt", "rw");
FileChannel channel = file.getChannel();

ByteBuffer buffer = ByteBuffer.allocate(64);

int bytesRead = channel.read(buffer);
while (bytesRead != -1) {
    System.out.println("Read:" + bytesRead);
    buffer.flip();
    
    while (buffer.hasRemaining()) {
        System.out.println((char) buf.get());
    }

    buffer.clear();
    bytesBuffer = channel.read(buffer);
}
file.close();
  • 注意buffer.flip() 的调用:
    • 首先读取数据到Buffer
    • 然后反转Buffer
    • 接着再从Buffer中读取数据
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容