Java NIO系列1-概观

Java NIO。中间的N你既可以理解为(new),也就是新的IO,相对于java1.5之前的IO它确实是新的;也可以理解为(no-blocking),也就是非阻塞的IO。


Java NIO的包和类

从Java 文档中可以看到,Java NIO的主要有这些包:

  • java.nio
  • java.nio.channels
  • java.nio.channels.spi
  • java.nio.charset
  • java.nio.charset.spi
  • java.nio.file
  • ...

Java NIO具有这么多的包,每个包下面有具有许多的类。java.nio包下定义了一些各种类型的缓冲区,java.nio.channels类里边定义了一些通道如ServerChannel,ServerSocketChannel。java.nio.file下定义写了一些新的文件操作api,诸如Paths,Files等。但是核心的主要是下面三个:

  • Channel 通道
  • Buffer 缓冲区
  • Selector 选择器

通道和缓冲区

在JavaNIO中,通道和缓冲区是很重要的部分,因为数据是通过这两个组件来流转的。数据可以从一个通道流向缓冲区,也可以从缓冲区流向通道。

JavaNIO中主要有以下通道:

类名 用途
FileChannel 文件IO操作
DatagramChannel UDP网络IO
SocketChannel
ServerSocketChannel TCP网络IO

这些类涵盖了,TCP,UDP网络IO.和文件IO.

Java NIO中的buffer,java中的众多buffer具有多种类型,使得我们可以通过IO来传递byte,short,int,double,float,long和字符串。ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer等。

选择器

前面我们提到,JavaNIO中重要的三个元素:通道,缓冲区,选择器。选择器是这样的一种东西:可以使单个线程处理多个通道。举个例子,假如我们有三个通道,我们将这三个通道注册在一个选择器上,然后线程让选择器来告诉他哪个线程准备就绪,可以“使用”了。

事实上,你可以不使用选择器,不使用这个“可以让单个线程操作多个通道”的玩意。你依然可以使用单个线程处理单个通道。但是仔细想想就会发现,选择器的好处还是很多的。


本篇,这里我们大概了解了一下JavaNIO是什么,主要包含什么东西,后续的文章再对每一个组件进行详细的介绍,并结合代码示例。

Java NIO系列1-概观的更多相关文章

  1. java nio系列文章

    java nio系列教程 基于NIO的Client/Server程序实践 (推荐) java nio与并发编程相关电子书籍   (访问密码 48dd) 理解NIO nio学习记录 图解ByteBuff ...

  2. Java NIO系列教程(八)JDK AIO编程

    目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...

  3. Java NIO系列教程(七) selector原理 Epoll版的Selector

    目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...

  4. Java NIO系列教程(三) Channel之Socket通道

    目录: <Java NIO系列教程(二) Channel> <Java NIO系列教程(三) Channel之Socket通道> 在<Java NIO系列教程(二) Ch ...

  5. Java NIO系列教程(二) Channel通道介绍及FileChannel详解

    目录: <Java NIO系列教程(二) Channel> <Java NIO系列教程(三) Channel之Socket通道> Channel是一个通道,可以通过它读取和写入 ...

  6. Java NIO系列教程(十一) Java NIO 与 IO

    Java NIO系列教程(十一) Java NIO与IO 当学习了 Java NIO 和 IO 的 API 后,一个问题马上涌入脑海: 我应该何时使用 IO,何时使用 NIO 呢?在本文中,我会尽量清 ...

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

    Java NIO系列教程(十)DatagramChannel 转载自并发编程网 – ifeve.com,本文链接地址: Java NIO系列教程(十) Java NIO DatagramChannel

  8. Java NIO系列教程(四) Scatter 和 Gather

    Java NIO系列教程(四) Scatter 和 Gather Java NIO 开始支持 scatter/gather,scatter/gather 用于描述从 Channel(译者注:Chann ...

  9. Java NIO系列教程(三-十二) Buffer

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

随机推荐

  1. AngularJS 1.x系列:Node.js安装及npm常用命令(1)

    1. Node.js安装 1.1 Node.js下载 Node.js官网:https://nodejs.org 当前下载版本(含npm):Latest LTS Version: v6.10.3 (in ...

  2. GC Tools

    GC Tools There are multiple ways to enable the GC log: specifying either of the flags -verbose:gc or ...

  3. Java BitSet使用场景和示例

    一.什么是BitSet? 注:以下内容来自JDK API: BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个boolean值.用非负的整数将BitSet的位编入索引.可以对每个编 ...

  4. Civil 3D .NET二次开发第11章代码升级至2018版注意事项

    原来涉及2017的,均需要改为2018 原来的21改为22 代码中AeccXUiLand.AeccApplication.11.0"改为AeccXUiLand.AeccApplication ...

  5. SpringCloud实践引入注册中心+配置中心

    随着服务数量的增多,尤其是多数项目涉及jni本地方法的调用,所需参数配置较多,同时内存溢出等维护问题时常发生.鉴于此,原tomcat集群的使用已难满足需求,而微服务的思想契合当前项目实践,特在服务端构 ...

  6. 【LOJ2586】【APIO2018】选圆圈 CDQ分治 扫描线 平衡树

    题目描述 在平面上,有 \(n\) 个圆,记为 \(c_1,c_2,\ldots,c_n\) .我们尝试对这些圆运行这个算法: 找到这些圆中半径最大的.如果有多个半径最大的圆,选择编号最小的.记为 \ ...

  7. Codeforces 1077F1 Pictures with Kittens (easy version)(DP)

    题目链接:Pictures with Kittens (easy version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:$dp[i][j ...

  8. 老男孩Python全栈学习 S9 日常作业 001

    1.简述变量命名规范 必须以字母.数字.下划线命名,且不能以数字开头 不能是python的关键字 不能以中文或者拼音作为变量名 命名格式推荐以驼峰式或者下划线连接命名 区分大小写 要有意义,具有可描述 ...

  9. openstack项目【day23】:keystone组件网关协议

    本节内容 一 静态页面和动态页面 二 什么是web server 三 什么是网关协议 3.1 引子 3.2 网关协议 四 网关协议CGI.FastCGI.WSGI.UWSGI 五 网关协议与keyst ...

  10. EF CodeFirst系列(5)---FluentApi

    FluentApi总结 1.FluentApi简介 EF中的FluentApi作用是通过配置领域类来覆盖默认的约定.在EF中,我们通过DbModelBuilder类来使用FluentApi,它的功能比 ...