Java NIO 由以下几个核心部分组成:

  • Channels
  • Buffers
  • Selectors

虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。

Channel 和 Buffer

基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。 数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。这里有个图示:

Channel和Buffer有好几种类型。下面是JAVA NIO中的一些主要Channel的实现:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

正如你所看到的,这些通道涵盖了UDP 和 TCP 网络IO,以及文件IO。

与这些类一起的有一些有趣的接口,但为简单起见,我尽量在概述中不提到它们。本教程其它章节与它们相关的地方我会进行解释。

以下是Java NIO里关键的Buffer实现:

  • ByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer

这些Buffer覆盖了你能通过IO发送的基本数据类型:byte, short, int, long, float, double 和 char。

Java NIO 还有个 MappedByteBuffer,用于表示内存映射文件, 我也不打算在概述中说明。

Selector

Selector允许单线程处理多个 Channel。如果你的应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便。例如,在一个聊天服务器中。

这是在一个单线程中使用一个Selector处理3个Channel的图示:

要使用Selector,得向Selector注册Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等。

转:Java NIO系列教程(一)Java NIO 概述相关推荐

  1. java nio 系列教程 四_Java NIO系列教程(四) Scatter/Gather

    作者:Jakob Jenkov   译者:郭蕾 Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道) ...

  2. Java NIO系列教程(十二) Java NIO与IO

    原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov   译者:郭蕾    校对:方腾飞 当学习了Java ...

  3. Java NIO系列教程(三) Buffer

    2019独角兽企业重金招聘Python工程师标准>>> Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本 ...

  4. Java NIO系列教程(五) 通道之间的数据传输

    在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel. transferFro ...

  5. Java NIO系列教程(四) Scatter/Gather

    转载自   Java NIO系列教程(四) Scatter/Gather 译文地址  作者:Jakob Jenkov   译者:郭蕾 Java NIO开始支持scatter/gather,scatte ...

  6. Java NIO系列教程(十) Java NIO DatagramChannel

    转载自  Java NIO系列教程(十) Java NIO DatagramChannel 译文链接    作者:Jakob Jenkov    译者:郑玉婷     校对:丁一 Java NIO中的 ...

  7. Java NIO系列教程(十一) Pipe

    转载自  Java NIO系列教程(十一) Pipe 原文链接     作者:Jakob Jenkov     译者:黄忠       校对:丁一 Java NIO 管道是2个线程之间的单向数据连接. ...

  8. Java NIO系列教程(十 五)Java NIO Path

    转载自  Java NIO系列教程(十 五)Java NIO Path 译文链接  译者:章筱虎 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新.J ...

  9. 视频教程-手写Java框架系列教程之一反射(含配套资料)-Java

    手写Java框架系列教程之一反射(含配套资料) 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动等知名企业 ...

最新文章

  1. mysql5.7和8.0的区别_Windows Terminal 1.0 和 Linux 版有啥区别
  2. TCP/IP详解--学习笔记(10)-TCP连接的建立与中止
  3. 怎样在计算机页面加密,怎么给文件加密并加密后隐藏起来?
  4. Bootstrap常用类
  5. 【jQuery系列之插件】jQuery插件---exselect实现联动
  6. Qt工作笔记-使用信号与槽让两个界面进行数据通信
  7. android 读取俄文csv乱码,android导出CSV,中文乱码问题
  8. leetcode刷题日记-846. 一手顺子
  9. IP路由原理.ppt
  10. Java项目实战教程分享
  11. 92 款中国风古风古韵中文字体美工古代书法字体打包下载
  12. python傅立叶光顺_函数型数据分析若干方法及应用
  13. WPS标题段前间距设置无效解决方案
  14. VMWare ESXi上传iso镜像文件
  15. QQ农场之新图鉴江苏印象
  16. Google鲜为人知的强大功能!(陆续更新)
  17. cad打印本计算机未配置,为什么CAD点打印的时候就会警告提示无法使用此绘图仪配置?有什么解决办法?...
  18. 字节跳动校招提前批前端一面总结
  19. HTML5 CSS3 生日快乐动画网页(粉红色的回忆)
  20. 未越狱设备 安装ipa

热门文章

  1. .NET Remoting 经典远程回调模型(二)
  2. 孤读Paper——《Deep Snake for Real-Time Instance Segmentation》
  3. 对多线程程序,单核cpu与多核cpu如何工作相关的探讨
  4. Linux监控工具Spotlight on Unix
  5. java中PriorityQueue优先级队列使用方法
  6. 深入Java集合学习系列:Hashtable的实现原理
  7. 分层结构的生活例子_详解软件分层架构设计、工作原理、实例以及具体架构
  8. 商业智能BI如何推进制造业转型
  9. mulitpartfile怎么接收不到值_GNSS接收机设计杂谈(射频前端+捕获)
  10. 数据库相关概念与编程使用方式