原文地址:http://tutorials.jenkov.com/java-nio/overview.html

java NIO 包含一下核心内容:

  •   Channels
  •   Buffers
  •   Selectors

java NIO 包含了比上述跟多的类和组件,但是我认为Channel,Buffer,Selector是java NIO的核心。剩下的组件,像Pipe,FileLock,是和这三大核心组件极少一起使用的。因此在概述中我将会把精力集中在这三个组件上。其他的组件将会在这系列教程的其他地方专门讲解。

Channels和Buffers

总的说,所有的IO在NIO中都是从channel开始的。Channel有一点像流。数据可以从channel读到buffer中,数据也可以从buffer铣刀channel中。如下图:

    

JAVA NIO 数据从Channel读入到Buffer,从Buffer写入到Channel

有很多的channel和buffer的类型,下面是在java NIO中实现的一些主要的Channel:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

从上可以看出,这些channel囊括了TCP+UDP 网络IO和文件IO

和这些类相关的还有一些有趣的接口,但是出于简洁的目的,我就不在这篇概述中说明了。他们将会在其他有关的章节中说明。

下列是在JAVA NIO中实现的Buffer类:

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

这些类囊括了可以通过IO发送数据的基本数据类型:byte,short,int,long,float,double,characters。

JAVA NIO还有一个叫MappedByteBuffer的类,这个类可以和mapped 文件一起使用。这里我也不再概述中介绍了。

Selector

selector一般都一个线程同时监控多个channel。如果你的程序有多个连接(channels)那么就会很方便,这样每一个连接的流量都很小。例如:聊天服务器。

下图是一个线程使用一个selector监控三个channels:

JAVA NIO: 一个线程使用一个selector监控三个channel

可以通过channel注册来使用selector。然后就可以调用selector的select()函数来使用。这个函数将会阻塞到一个时间可以使用其中一channel为止。当方法返回的时候,这个线程就可以处理这些事件了。事件例子:连接,数据到达等。

[翻译]java nio 概述的更多相关文章

  1. Java NIO学习笔记一 Java NIO概述

    Java NIO概述 Java NIO(新的IO)是Java的替代IO API(来自Java 1.4),这意味着替代标准的 java IO和java Networking API.Java NIO提供 ...

  2. Java NIO系列教程(一) Java NIO 概述

    <I/O模型之四:Java 浅析I/O模型> 一.阻塞IO与非阻塞IO 阻塞IO: 通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据.同样,写入调用将会阻塞直至数 ...

  3. Java NIO概述

    Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然 Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Se ...

  4. 转:Java NIO系列教程(一)Java NIO 概述

    Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Sel ...

  5. Java NIO(一) Java NIO 概述

    Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Sel ...

  6. NIO(一) Java NIO 概述

    转:http://ifeve.com/overview/ Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和 ...

  7. JAVA NIO概述(一):I/O模型

    NIO是jdk1.4加入的新功能,我们一般成为非阻塞IO,在1.4之前,JAVA中的都是BIO(堵塞IO),BIO有以下几个缺点: 没有数据缓冲区,I/O性能存在问题 没有C/C++中channel( ...

  8. Java NIO 概述

    Channel 和 Buffer 标准的Java IO编程接口是面向字节流和字符流的 而 NIO 是面向通道和缓冲区的 数据总是从通道中读到Buffer中,或者从Buffer写入通道中 NIO可以理解 ...

  9. Java NIO 系列学习(一)Java NIO概述

    参考资料: http://www.importnew.com/19816.html http://ifeve.com/overview/ NIO 三大核心部分: Channel(通道).Buffer( ...

随机推荐

  1. PHP文件操作 之读取一个文件(以二进制只读的方式打开)

    最近应用了文件的读取,顺便复习一下! //读取一个文件 $f = fopen($filename,'rb'); $f: 表示返回的一个资源句柄 $filename:要打开的文件路径 rb:参数,表示只 ...

  2. Levenshtein distance

    https://en.wikipedia.org/wiki/Levenshtein_distance 验证码识别 图片中的二维码截取

  3. 12秒开机!ExpressCache SSD缓存加速

    SSD固态硬盘的读写速度比传统硬盘快了很多,读取速度能到300M/s 写入速度大约在80M/S 但SSD硬盘的价格也笔记机械硬盘高了很多,128G的固态硬盘淘宝价大概在800左右,想想现在随便一个软件 ...

  4. Hashtable、Dictionary和List 谁效率更高

    一 前言 很少接触HashTable晚上回来简单看了看,然后做一些增加和移除的操作,就想和List 与 Dictionary比较下存数据与取数据的差距,然后便有了如下的一此测试, 当然我测的方法可能不 ...

  5. http安全篇

    一.app与服务端交互确保来源的安全 作为一个移动互联网App,天生是需要和服务器通信的.那么,服务器如何识别客户端的身份?我们如何保证数据传输过程中的安全性?要靠两个东西:使用AppKey做身份识别 ...

  6. Archiver 浅析

    归档是一个过程,即用某种格式来保存一个或多个对象,以便以后还原这些对象.通常,这个过程包括将(多个)对象写入文件中,以便以后读取该对象. 两种归档数据的方法:属性列表和带键值的编码. 属性列表局限性很 ...

  7. Java线程池的原理及几类线程池的介绍

    刚刚研究了一下线程池,如果有不足之处,请大家不吝赐教,大家共同学习.共同交流. 在什么情况下使用线程池? 单个任务处理的时间比较短 将需处理的任务的数量大 使用线程池的好处: 减少在创建和销毁线程上所 ...

  8. HIVE中的几种排序

    1.order by:全局排序 select * from emp order by sal; 2.sort by:对于每个reduce进行排序 set mapreduce.job.reduces=3 ...

  9. insert into hi_user_score set hello_id=74372073,a=10001 on duplicate key update hello_id=74372073, a=10001

    insert into hi_user_score set hello_id=74372073,a=10001 on duplicate key update hello_id=74372073, a ...

  10. java对象中继承和变量初始化顺序浅析

    先上例子代码 public class F { int age = 5; public F() { print(); } public void print() { System.out.printl ...