转:Java NIO系列教程(一)Java NIO 概述
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 概述相关推荐
- java nio 系列教程 四_Java NIO系列教程(四) Scatter/Gather
作者:Jakob Jenkov 译者:郭蕾 Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道) ...
- Java NIO系列教程(十二) Java NIO与IO
原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov 译者:郭蕾 校对:方腾飞 当学习了Java ...
- Java NIO系列教程(三) Buffer
2019独角兽企业重金招聘Python工程师标准>>> Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本 ...
- Java NIO系列教程(五) 通道之间的数据传输
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel. transferFro ...
- Java NIO系列教程(四) Scatter/Gather
转载自 Java NIO系列教程(四) Scatter/Gather 译文地址 作者:Jakob Jenkov 译者:郭蕾 Java NIO开始支持scatter/gather,scatte ...
- Java NIO系列教程(十) Java NIO DatagramChannel
转载自 Java NIO系列教程(十) Java NIO DatagramChannel 译文链接 作者:Jakob Jenkov 译者:郑玉婷 校对:丁一 Java NIO中的 ...
- Java NIO系列教程(十一) Pipe
转载自 Java NIO系列教程(十一) Pipe 原文链接 作者:Jakob Jenkov 译者:黄忠 校对:丁一 Java NIO 管道是2个线程之间的单向数据连接. ...
- Java NIO系列教程(十 五)Java NIO Path
转载自 Java NIO系列教程(十 五)Java NIO Path 译文链接 译者:章筱虎 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新.J ...
- 视频教程-手写Java框架系列教程之一反射(含配套资料)-Java
手写Java框架系列教程之一反射(含配套资料) 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动等知名企业 ...
最新文章
- mysql5.7和8.0的区别_Windows Terminal 1.0 和 Linux 版有啥区别
- TCP/IP详解--学习笔记(10)-TCP连接的建立与中止
- 怎样在计算机页面加密,怎么给文件加密并加密后隐藏起来?
- Bootstrap常用类
- 【jQuery系列之插件】jQuery插件---exselect实现联动
- Qt工作笔记-使用信号与槽让两个界面进行数据通信
- android 读取俄文csv乱码,android导出CSV,中文乱码问题
- leetcode刷题日记-846. 一手顺子
- IP路由原理.ppt
- Java项目实战教程分享
- 92 款中国风古风古韵中文字体美工古代书法字体打包下载
- python傅立叶光顺_函数型数据分析若干方法及应用
- WPS标题段前间距设置无效解决方案
- VMWare ESXi上传iso镜像文件
- QQ农场之新图鉴江苏印象
- Google鲜为人知的强大功能!(陆续更新)
- cad打印本计算机未配置,为什么CAD点打印的时候就会警告提示无法使用此绘图仪配置?有什么解决办法?...
- 字节跳动校招提前批前端一面总结
- HTML5 CSS3 生日快乐动画网页(粉红色的回忆)
- 未越狱设备 安装ipa
热门文章
- .NET Remoting 经典远程回调模型(二)
- 孤读Paper——《Deep Snake for Real-Time Instance Segmentation》
- 对多线程程序,单核cpu与多核cpu如何工作相关的探讨
- Linux监控工具Spotlight on Unix
- java中PriorityQueue优先级队列使用方法
- 深入Java集合学习系列:Hashtable的实现原理
- 分层结构的生活例子_详解软件分层架构设计、工作原理、实例以及具体架构
- 商业智能BI如何推进制造业转型
- mulitpartfile怎么接收不到值_GNSS接收机设计杂谈(射频前端+捕获)
- 数据库相关概念与编程使用方式