NIO 概述

NIO有三个核心组件:

  • 通道(Channels)
  • 缓冲器(Buffers)
  • 选择器(Selectors)

实际上,NIO的组件和类远不止这三个,但这个三个组件是核心。至于其它组件,例如Pipe和FileLock只不过是围绕在三大核心组件旁的实用工具类。因此,本文将重点关注这三个组件。其它组件也会在本系列其它相应的文章里介绍。

通道和缓冲器

在NIO里,所有IO都是从通道开始的。通道和流有点相似,可以将数据从通道读入缓冲器,也可以将数据从缓冲器写入通道,图示如下:

通道和缓冲器都有多种类型,下面是NIO主要的通道类型列表:

  • FileChannel 文件通道
  • DatagramChannel 数据报通道
  • SocketChannel socket通道
  • ServerSocketChannel serversocket通道

如你所见,这些通道涵盖了网络IO(包括UDP和TCP)和文件IO。除此之外还有一些有意思的接口,限于篇幅,本文不提及,但在本系列相关文章将做详述。
NIO主要的缓冲器类型如下:

  • ByteBuffer 字节缓冲器
  • CharBuffer 字符缓冲器
  • DoubleBuffer 双精度浮点类型缓冲器
  • FloatBuffer 单精度浮点类型缓冲器
  • IntBuffer 整型缓冲器
  • LongBuffer 长整型缓冲器
  • ShortBuffer 短整型缓冲器

这些缓冲器涵盖了你可以通过IO发送的基本数据类型:byte, short, int, long, float, double 和 char。此外,还有 MappedByteBuffer (映射字节缓冲器)可用来处理内存映射文件(memory mapped files),此文也不作详述。

选择器

选择器允许单线程处理多个通道,这在当程序开了很多通道连接,但每个通道连接的通信量都不大时(比如说聊天服务器)使用起来很方便。下面是单个线程使用选择器来管理三个通道的示意图:

使用选择器时,首先要将通道注册到选择器,然后调用选择器的select()方法,这个方法会一直阻塞,直到有一个注册了的通道准备就绪触发事件。一旦select()方法返回,线程就可以处理这些事件,诸如连接接入、数据到达等事件。

完整教程

完整教程请看

Java NIO 教程相关推荐

  1. java nio教程_Java NIO教程

    java nio教程 1.简介 Java NIO是Java 1.4引入的一个库. 自从Java NIO推出以来,它提供了另一种方法来处理I / O和网络事务. 它被认为是Java网络和Java IO库 ...

  2. Java NIO教程

    1.简介 Java NIO是从Java 1.4引入的库. 自从Java NIO推出以来,它提供了另一种方法来处理I / O和网络事务. 它被认为是Java网络和Java IO库的替代方法. 开发Jav ...

  3. 海纳百川而来的一篇相当全面的Java NIO教程

    目录 零.NIO包 一.Java NIO Channel通道 Channel的实现(Channel Implementations) Channel的基础示例(Basic Channel Exampl ...

  4. java.nio教程_Java NIO系列教程(三) Buffer

    原文链接     作者:Jakob Jenkov     译者:airu     校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...

  5. Java IO/NIO教程

    Java IO教程 http://tutorials.jenkov.com/java-io/index.html Java NIO教程 英文版: http://tutorials.jenkov.com ...

  6. Java NIO之Selector(选择器)

    **Java高级特性增强-NIO 本部分网络上有大量的资源可以参考,在这里做了部分整理并做了部分勘误,感谢前辈的付出,每节文章末尾有引用列表~ 写在所有文字的前面:作者在此特别推荐Google排名第一 ...

  7. Java NIO之Channel(通道)

    **Java高级特性增强-NIO 本部分网络上有大量的资源可以参考,在这里做了部分整理并做了部分勘误,感谢前辈的付出,每节文章末尾有引用列表~ 写在所有文字的前面:作者在此特别推荐Google排名第一 ...

  8. Java NIO SocketChannel+Buffer+Selector 详解(含多人聊天室实例)

    一.Java NIO 的核心组件 Java NIO的核心组件包括:Channel(通道),Buffer(缓冲区),Selector(选择器),其中Channel和Buffer比较好理解  简单来说 N ...

  9. java NIO及NIO聊天室

    参考链接: java NIO实例1:http://blog.chinaunix.net/uid-25808509-id-3346228.html java NIO教程之selector(一系列): h ...

最新文章

  1. 这篇文章可以满足你80%日常工作!一线互联网公司面经总结
  2. 边缘计算助力云游戏成为5G时代的杀手级应用
  3. 网页设计个人主页源码_WebSSH - 网页上的SSH终端
  4. OpenShift 4 - DevSecOps Workshop (4) - 为 Task 增加参数和Workspace
  5. python猜名词甲乙丙_用python实现了一下:甲乙两人互猜数字(数理逻辑)
  6. VS运行时错误 CRT detected that the application wrote to memory after end of heap buffer
  7. 基于单片机的电子秤系统设计(电路+流程)
  8. 极简毕业设计答辩PPT模板
  9. toolchain安装教程支持_riscv-gnu-toolchain的安装经历
  10. 安装DevExpress后如何在工具箱显示Dev控件
  11. SPECCPU2006 Spec2006 使用说明
  12. 2021-11-27 2021年施工员-装饰方向-岗位技能(施工员)考试题及施工员-装饰方向-岗位技能(施工员)考试题库
  13. Linux 下的zip,rar
  14. 统计遗传学:第三章,群体遗传
  15. win10高性能模式
  16. Arcmap 10.8与Arcmap 10.2工具对比
  17. while循环语句初学
  18. 运用 HTML+Css+JavaScript 实现京东购物车
  19. PHP二级域名分发网站源码商业版全开源
  20. CMake中使用vcpkg

热门文章

  1. 支付宝回调接口验签失败
  2. javaScript数据类型(包括基本数据类型和非基本数据类型)
  3. Android textview 获取url,获取电话号码
  4. 小程序 获取用户信息 openid 等
  5. android 清理缓存 简书,分享:Android清除本地数据缓存代码
  6. element-ui如何进行调试
  7. Ant Design Pro 2.0/umijs站点配置到非站点根目录下处理
  8. sql 简单加密函数
  9. 查重多少合格_期刊论文查重一般多少合格?
  10. b 树查找时间复杂度_心里没点 B 树。。。