原文地址: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为止。当方法返回的时候,这个线程就可以处理这些事件了。事件例子:连接,数据到达等。

最新文章

  1. 弄了一个支持SSL的TCP客户端
  2. Javascript 判断一个数字是否含有小数点
  3. SDWebImage使用详解
  4. 传输层(一)TCP的三次握手和四次挥手及关闭套接字的原理
  5. symbol(s) not found for architecture x86_64
  6. js与asp.net后台交互
  7. 一段C程序分析
  8. setjmp/longjmp 使用
  9. 【VB】StrConv函数 vbUnicode用法
  10. WPF4字体改善
  11. java四大会话技术
  12. 图片布局css
  13. 基于Redis的分布式锁的简单实现
  14. MySQL5学习笔记(三)
  15. 死磕 java集合之DelayQueue源码分析
  16. 【原创】大数据基础之Zookeeper(4)应用场景
  17. Windows 10 & change DNS
  18. python3+selenium入门02-操作火狐浏览器
  19. code::Blocks生成的dll 在 java jni 调用遇到的问题
  20. day 05JVM和深入理解java虚拟机

热门文章

  1. shell 中的引用
  2. Apache查看并发及TIME_WAIT过多的解决
  3. 使用 Linux 搭建 VPN
  4. Bit-Value Type
  5. 由验证码和session丢失的引发原因
  6. Python 虚拟环境Virtualenv
  7. java开发bug 在启动Tomcat 6.0时发现第一条信息便是
  8. FTS抓包看L2CAP Connection的建立(二)
  9. Qt StyleSheet皮肤(黑色,比较好看,而且很全)
  10. Qt 之 使用 https发送 HTTP请求(使用OPENSSL库)