Java NIO之概览

131 阅读1分钟

背景

这个系列的文章都是翻译自jenkov.com/tutorials/j… 版权属于创作者。哪里翻译的不对欢迎交流。 Java NIO 是Java里可选择的IO API,意味着可以替代标准Java IO和Java 网络API。Java NIO提供了一个不同的IO编程模型相对于传统的IO API。注意:有些时候NIO被叫成Non-blocking IO.然而这不是NIO原生的意义。同时,NIO API的一部分实际上是阻塞的-举个例子比如文件API。所以标签"Non-blocking"略微有些误导。

Java NIO: Non-blocking IO

Java NIO允许你做一些non-blocking IO。对于实际上来说,一个线程可以获取一个通道去读取数据到buffer里。当channle读取数据到buffer里时,线程可以做其他的。一旦读取数据到buffer,线程可以接着处理它。写数据到channel也是一样。

Java NIO: Channels 和 Buffers

在标准IO API里你使用字节流和字符流。在NIO里你使用channel 和buffers。数据通常从channel读取到buffer,或者从buffer写到channel.

Java NIO: Selectors

Java NIO 包含了 "selector"的观念。一个selector是一个对象可以监视多个channel的事件(就像: 打开链接,接收到数据等等)。因此,一个线程可以监听多个channle的数据。

Java NIO Concepts

对于旧的Java IO 模型这里有几种新的概念在学习Java NIO时。这几种概念已经在下面:

· Channels

· Buffers

· Scatter - Gather

· Channel to Channel Transfers

· Selectors

· FileChannle

· SocketChannel

· ServerSocketChannel

· Non-blocking Server Design

· DatagramChannel

· Pipe

· NIO vs IO

· Path

· Files

· AsynchronousFileChannel