zoukankan      html  css  js  c++  java
  • 11、Java IO NIO

    Java IO 方式有很多种,基于不同的 IO 抽象模型和交互方式,可以进行简单区分。

    传统的 java.io 包,它基于流模型实现,提供了我们最熟知的一些 IO 功能,比如 File 抽象、输入输出流等。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞在那里,它们之间的调用是可靠的线性顺序。java.io 包的好处是代码比较简单、直观,缺点则是 IO 效率和扩展性存在局限性,容易成为应用性能的瓶颈。很多时候,人们也把 java.net 下面提供的部分网络 API,比如 Socket、ServerSocket、HttpURLConnection 也归类到同步阻塞 IO 类库,因为网络通信同样是 IO 行为。

     JDK 1.4 中引入了 NIO 框架(java.nio 包),提供了 ChannelSelectorBuffer 等新的抽象,可以构建多路复用的、同步非阻塞 IO 程序,同时提供了更接近操作系统底层的高性能数据操作方式。

    在 Java 7 中,NIO 有了进一步的改进,也就是 NIO 2,引入了异步非阻塞 IO 方式,也有很多人叫它 AIO(Asynchronous IO)。异步 IO 操作基于事件和回调机制,可以简单理解为,应用操作直接返回,而不会阻塞在那里当后台处理完成,操作系统会通知相应线程进行后续工作。

    从传统 IO(BIO) NIONIO 2(AIO),其中有很多地方可以扩展开来,考察点涉及方方面面,比如:

    • 基础 API 功能与设计, InputStream/OutputStream 和 Reader/Writer 的关系和区别。

    • NIO、NIO 2 的基本组成。

    • 给定场景,分别用不同模型实现,分析 BIO、NIO 等模式的设计和实现原理。

    • NIO 提供的高性能数据操作方式是基于什么原理,如何使用?

    • 或者,从开发者的角度来看,你觉得 NIO 自身实现存在哪些问题?有什么改进的想法吗?

  • 相关阅读:
    odoo开发笔记 -- 异常、错误、警告、提示、确认信息显示
    odoo开发笔记--前端搜索视图--按照时间条件筛选
    odoo开发笔记-自定义发送邮件模板
    html表格导出Excel的一点经验心得
    throw和throw ex的区别
    js中对String去空格
    根据不同的多语言环境来切换不同的页面样式的具体示例
    HTML中 :after和:before的作用及使用方法(转)
    CSS清除浮动方法集合
    页面的Tab选项卡 简单实例
  • 原文地址:https://www.cnblogs.com/xuan5301215/p/9120861.html
Copyright © 2011-2022 走看看