[翻译]java nio 概述
原文地址: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 概述的更多相关文章
- Java NIO学习笔记一 Java NIO概述
Java NIO概述 Java NIO(新的IO)是Java的替代IO API(来自Java 1.4),这意味着替代标准的 java IO和java Networking API.Java NIO提供 ...
- Java NIO系列教程(一) Java NIO 概述
<I/O模型之四:Java 浅析I/O模型> 一.阻塞IO与非阻塞IO 阻塞IO: 通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据.同样,写入调用将会阻塞直至数 ...
- Java NIO概述
Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然 Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Se ...
- 转:Java NIO系列教程(一)Java NIO 概述
Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Sel ...
- Java NIO(一) Java NIO 概述
Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Sel ...
- NIO(一) Java NIO 概述
转:http://ifeve.com/overview/ Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和 ...
- JAVA NIO概述(一):I/O模型
NIO是jdk1.4加入的新功能,我们一般成为非阻塞IO,在1.4之前,JAVA中的都是BIO(堵塞IO),BIO有以下几个缺点: 没有数据缓冲区,I/O性能存在问题 没有C/C++中channel( ...
- Java NIO 概述
Channel 和 Buffer 标准的Java IO编程接口是面向字节流和字符流的 而 NIO 是面向通道和缓冲区的 数据总是从通道中读到Buffer中,或者从Buffer写入通道中 NIO可以理解 ...
- Java NIO 系列学习(一)Java NIO概述
参考资料: http://www.importnew.com/19816.html http://ifeve.com/overview/ NIO 三大核心部分: Channel(通道).Buffer( ...
随机推荐
- C++类型转化分析(1)
仔细想想地位卑贱的类型转换功能(cast),其在程序设计中的地位就象goto语句一样令人鄙视.但是它还不是无法令人忍受,因为当在某些紧要的关头,类型转换还是必需的,这时它是一个必需品. 不过C风格的类 ...
- Shell-bash中特殊字符汇总[转]
转自http://www.linuxidc.com/Linux/2015-08/121217.htm 首先举例一个bash脚本 #!/bin/bash file=$1 files=`find / -n ...
- MP20 MBO issue summary
MP3 MBO经验,教训 改名字HGA003_PTOT_01,发现居然闪现进度条,正常情况是不会闪现进度条的,只是改个名字而已,怀疑之前用过这个名字,所以我后来改成HGA003_PTOT_03了. 先 ...
- What is Heterogeneous Computing?
http://developer.amd.com/resources/heterogeneous-computing/what-is-heterogeneous-computing/ Heteroge ...
- p::first-line { text-transform: uppercase }
https://www.w3.org/TR/css3-selectors/ Note that the length of the first line depends on a number of ...
- Mac 下 命令收藏
1.查看文件的二进制 xxd -b test.wav 2.所有占用的端口 sudo lsof -i -P | grep -i "listen" 原文地址:Mac 下 命令收藏标签: ...
- Delphi 缩放图像代码 - 支持PNG透明通道
要求Delphi2007或者更高版本, 系统要求至少XP-SP2以上 实际上是利用了Windows的windowscodecs.dll这个文件的功能 在VCL里已经封装为TWICImage类 proc ...
- Bootstrap 进度条媒体对象和条组
列表组组件 列表组组件用于显示一组列表的组件. //基本实例 <ul class="list-group"> <li class="list-group ...
- pro5
1.本次课学到的知识点 (1)循环结构的概念 在我们需要重复进行某个步骤是就需要运用到循环结构. (2)三种循环语句 for,while,do-while是三种常用的循环语句,其中while的适用范围 ...
- CC2541连接BTool教程
一.简介 本篇介绍如何基于Smart RF(主芯片CC2541).Smart RF(主芯片CC2540).Usb Dongle,来使用软件BTool. 本篇暂时只介绍如何连接,不介绍如何使用BTool ...