java nio

Posted 风儿飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java nio相关的知识,希望对你有一定的参考价值。

Java NIO与IO的区别:传统的IO中需要为每个连接建立一个线程,当并发数量巨大时,对内存及线程切换的开销巨大,NIO提供线程池,不再为每个连接建立单独的线程,提供了非阻塞的能力。

1、Java NIO的核心组件:

Channels:所有的IO在NIO中都从一个Channel开始,Channel有点像流,数据可以从Channel读到Buffer,也可以从Buffer读到Channel

Buffers

Selectors:允许单个线程处理多个Channel

2、Channel:通道

(1)Java NIO的通道类似流,可以从通道中读取数据到Buffer,也可以将Buufer中的数据写入Channel,可以异步读写。

(2)Channel实现:

FileChannel:从文件中读写数据

DatagramChannel:能通过UDP读取网络中的数据

SocketChannel:能通过TCP读取网络中的数据

ServerSocketChannel:监听新进来的TCP连接,对每一个新进来的连接都会创建一个SocketChannel

3、Buffer:用于和通道进行交互,本质上是一块可以进行数据读写的内存,有3个重要的属性:

(1)capacity:Buffer的容量、大小

(2)position:数据读写的当前位置

(3)limit:写模式下limit等于capacity,读模式下limit为写入数据的大小

4、Selector:能够检测一到多个通道,并能够知晓通道是否为读写做好准备的组件,这样一个单独的线程可以管理多个通道。

 

以上是关于java nio的主要内容,如果未能解决你的问题,请参考以下文章

JAVA NIO 文件部分

Java-杂项-java.nio:java.nio

浅谈Netty相关概念

Java I/O 扩展

什么是NIO2

Java/计算机网络/操作系统面试题总结(未完待续)