BIO、NIO、AIO

不论是在求职面试还是在工作实践中IO都是一个程序员基本的修养,本篇是作为学习IO相关知识点的一个记录。

在jdk1.4之前java只提供了java.io包,它基于流模型实现,提供了我们熟知的file、输入流inputstream和输出流outputstream功能,它的交互方式是同步、阻塞的,线程一直堵塞直到读取输入流和写入输出流完成,是一种可靠的顺序处理机制。

优点是代码简单、直观,缺点是IO效率和和扩展性存在局限性。

我们把java.net下提供的部分IPI,例如socket,serversocket,httpurlconnection也会归到IO阻塞类库,因为网络通信同样是IO行为。

从jdk1.4开始java提供了java.nio,可以实现多路复用的、同步非阻塞的IO应用程序,同时提供更接近操作系统底层的数据高性能操作方式。NIO包含三个重要的概念:buffer是数据容器,除了boolen类型意外,buffer对基本数据类型都有对应的实现。channel是文件描述符,更低层次的抽象,类似file,更接近操作系统层面,是NIO用来实现批量式IO的一种抽象。selector是NIO实现多路复用的基础,selector可以监听注册在selector上的channel是否有channal处于就绪状态,当有channel处于就绪状态时可以唤起处理,selector基于操作系统底层的处理机制,不同的操作系统机制不同,linux是epoll,windows是iocp。

java7引入了NIO2(AIO)通过事件回调机制实现了多路复用的异步处理。可以简单理解为,应用操作直接返回,而不会阻塞在那里,当后台处理完成,操作系统会通知相应线程进行后续工作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值