[翻译]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为止。当方法返回的时候,这个线程就可以处理这些事件了。事件例子:连接,数据到达等。
最新文章
- 弄了一个支持SSL的TCP客户端
- Javascript 判断一个数字是否含有小数点
- SDWebImage使用详解
- 传输层(一)TCP的三次握手和四次挥手及关闭套接字的原理
- symbol(s) not found for architecture x86_64
- js与asp.net后台交互
- 一段C程序分析
- setjmp/longjmp 使用
- 【VB】StrConv函数 vbUnicode用法
- WPF4字体改善
- java四大会话技术
- 图片布局css
- 基于Redis的分布式锁的简单实现
- MySQL5学习笔记(三)
- 死磕 java集合之DelayQueue源码分析
- 【原创】大数据基础之Zookeeper(4)应用场景
- Windows 10 &; change DNS
- python3+selenium入门02-操作火狐浏览器
- code::Blocks生成的dll 在 java jni 调用遇到的问题
- day 05JVM和深入理解java虚拟机