Java NIO 详解(一)_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java NIO 详解(一)

Java NIO 详解(一)

 2013/10/15 12:41:23  SwordShadow  程序员俱乐部  我要评论(0)
  • 摘要:NIO提供了一个全新的底层的I/O层模型。与最初的java.io包中面向留(Stream-oriented)的概念不同,NIO采用了面向块的概念(block-oriented)。这意味着尽可能的情况下,I/O操作以大的数据块为单位进行,而不是一次一个字节或字符进行NIO中提供了与平台无光的非阻塞I/O(nonblockingI/O)。与面向线程的、阻塞式I/O方式相比,多道通信
  • 标签:详解 Java

? ? ? NIO提供了一个全新的底层的I/O层模型。与最初的java.io包中面向留(Stream-oriented)的概念不同,NIO采用了面向块的概念(block-oriented)。这意味着尽可能的情况下,I/O操作以大的数据块为单位进行,而不是一次一个字节或字符进行

? ??

? ? ? ?NIO中提供了与平台无光的非阻塞I/O(nonblocking I/O)。与面向线程的、阻塞式I/O方式相比,多道通信、非阻塞I/O技术可以使应用程序更有效地处理大量连接的情况

?

? ? ? ?IO的阻塞操作

? ? ? ?在传统I/O操作中接收键盘数据的操作时只要执行到readLine()方法,程序就要停止等待用户输入数据;在网络编程中服务器端使用ServerSocket类的accept()方法时,服务器一直处于等待操作,要等待客户端连接。这两类都属于阻塞操作,因为都会让程序暂停执行

? ? ? ?

? ? ? ?缓存区与Buffer

? ? ? ?在基本IO操作中所有操作都是直接已流的形式完成的,而在NIO中所有的操作都要使用缓存区处理,且所有的读写操作都是通过缓存区完成的。缓存区(Buffer)是一个线性的、有序的数据集,只能容纳某种特定的数据类型

?

? ? ? ?通道 Channel

? ? ? ?通道可以用来读取和写入数据,通道类似之前的输入/输出流,但是程序不会直接操作通道,所有的内容都是先读到或写入缓冲区中,在通过缓冲区中取得或写入

? ? ? ?通道与传统的流操作不同,传统的流操作分为输入或输出流,而通道本身是双向操作的,既可以完成输入也可以完成输出 ?

? ? ? ?

? ? ? ? ?图: ?通道的操作流程

? ? ? ?

? ? ? ? Selector

? ? ? ? 在新IO中Selector是一个极其重要的概念,在原来使用IO和Socket构造网络服务时,所有的网络服务将使用阻塞的方式进行客户端的连接,而如果使用了新IO则可以构造一个非阻塞的网络服务

  • class='magplus' title='点击查看原始大小图片' />
  • 大小: 6.6 KB
  • 查看图片附件
发表评论
用户名: 匿名