Java NIO 基础

和阻塞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轮询,就可以接入成千上万的连接。

时序图

这里写图片描述

代码示例:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值