📌 Java NIO Channel

简介: Java NIOChannel和传统的流相似,但是也存在一些差异:• 在同一个Channel通道中,既可以进行 读操作 也可以进行 写操作,但是 流 只能进行 读 或者 写 其中一种操作。• Channel通道可以进行异步读写。• Channel可以从 Buffer中进行读写操作。将数据从Channel通道读取到Buffer缓冲区,并将数据从Buffer缓冲区写入Channel通道。

Java NIOChannel和传统的流相似,但是也存在一些差异:

  • 在同一个Channel通道中,既可以进行 读操作 也可以进行 写操作,但是 流 只能进行 读 或者 写 其中一种操作。
  • Channel通道可以进行异步读写。
  • Channel可以从 Buffer中进行读写操作。将数据从Channel通道读取到Buffer缓冲区,并将数据从Buffer缓冲区写入Channel通道。

Java NIO提供了对Channel接口的实现:

  • FileChannel:可以对文件内容进行读写。
  • DatagramChannel:基于UDP协议对网络数据进行读写。
  • SocketChannel:基于TCP协议进行网络数进行读写。
  • ServerSocketChannel:允许像web服务器一样侦听传入的TCP连接。对于每个传入连接,都会创建一个SocketChannel
// 创建随机访问文件:
RandomAccessFile randomAccessFile = new RandomAccessFile("test.txt", "rw");
// 获取FileChannel:
FileChannel fileChannel = randomAccessFile.getChannel();
// 使用缓存区进行内存分配:
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
// 从Channel中读取数据,写入到Buffer中:
int read = fileChannel.read(byteBuffer);
while (-1 != read) {
    System.out.println("read:" + read);
    // flip转换读写模式:
    byteBuffer.flip();
    while (byteBuffer.hasRemaining()) {
        System.out.print((char) byteBuffer.get());
    }
    // 清除缓冲区内容:
    byteBuffer.clear();
    read = fileChannel.read(byteBuffer);
}

Channel作为数据传输的通道,提供了如下几个方法:

  • close()关闭Channel
  • closeFuture用来处理Channel的关闭,sync()方法作为是同步等待Channel关闭;而addLinstener()方法是异步等待Channel关闭。
  • pipline()方法田间处理器。
  • write()方法将数据写入。
  • flush()清空数据缓存,把数据发送到服务端。
  • writeAndFlush()将数据写入并刷出。
相关文章
|
1月前
|
存储 Java 数据处理
|
1月前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同
|
1天前
|
缓存 Java 测试技术
Java基础BIO、NIO、AIO小结(上)
Java基础BIO、NIO、AIO小结
6 0
|
8天前
|
监控 Java 开发者
深入理解 Java 网络编程和 NIO
【4月更文挑战第19天】Java网络编程基于Socket,但NIO(非阻塞I/O)提升了效率和性能。NIO特点是非阻塞模式、选择器机制和缓冲区,适合高并发场景。使用NIO涉及通道、选择器和事件处理,优点是高并发、资源利用率和可扩展性,但复杂度、错误处理和性能调优是挑战。开发者应根据需求选择是否使用NIO,并深入理解其原理。
|
2月前
|
移动开发 编解码 网络协议
用Java的BIO和NIO、Netty来实现HTTP服务器(三) 用Netty实现
用Java的BIO和NIO、Netty来实现HTTP服务器(三) 用Netty实现
|
2月前
|
网络协议 Java Linux
用Java来实现BIO和NIO模型的HTTP服务器(二) NIO的实现
用Java来实现BIO和NIO模型的HTTP服务器(二) NIO的实现
|
2月前
|
编解码 网络协议 Java
用Java的BIO和NIO、Netty实现HTTP服务器(一) BIO与绪论
用Java的BIO和NIO、Netty实现HTTP服务器(一) BIO与绪论
|
3月前
|
Java 应用服务中间件 Linux
java中的NIO,BIO,AIO
java中的NIO,BIO,AIO
17 0
|
3月前
|
设计模式 网络协议 Java
Java NIO 网络编程 | Netty前期知识(二)
Java NIO 网络编程 | Netty前期知识(二)
77 0
|
3月前
|
Java 索引
📌 Java NIO Buffer
Java NIO缓冲区在与NIO通道交互时使用。数据从通道读取到缓冲区,然后从缓冲区写入通道。 缓冲区本质上是一块内存,可以在其中写入数据,然后再进行读取。这个内存块被封装在一个NIOBuffer对象中,该对象提供了一组方法,可以更容易地使用内存块。