您的位置:首页 > 编程语言 > Java开发

Java NIO 基础

2016-06-16 16:04 330 查看
和阻塞IO对应,

socket ————– socketChannel

serverSocket———-serverSocketChannel

这两种通道又支持阻塞和非阻塞两种实现模式。

阻塞模式代码简单,但是性能和可靠性不好。非阻塞模式相反。

基本概念

buffer

缓冲器buffer对象是NIO类库新加入的对象。他是非常重要的。

在以前面向流的IO中,输入输出是直接写到Stream中的。

在NIO里,所有数据的读写都是要通过缓冲区来的。

常用的缓冲区是ByteBuffer。实际上,每一种java基本类型都有对应的Buffer(boolean除外)。ByteBuffer常用是因为他最适合网络读写。

channel

通道。

和流的重要区别的,channel是双向的。

channel是全双工的。

channel主要非两大类:

用于网络读写的SelectableChannel

用于文件读写的FileChannel

selector

多路复用器。前面说过NIO的IO模型是用的多路复用IO。

selector是NIO编程的基础。非常重要。

selector会轮询注册其上的channel。如果某个channel有新的tcp连接,或者读写事件,那么这个channel就处于就绪状态,会被selector轮询出来。然后可通过selectionKey得到这个就绪的Channel,进行IO操作。

jdk使用epoll代替传统的select实现,因此它没有最大连接句柄1024/2048的限制,只需要一个线程负责selector轮询,就可以接入成千上万的连接。

时序图



代码示例:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: