NIO

Posted 断剑重铸之时

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NIO相关的知识,希望对你有一定的参考价值。

缓冲区的工作与通道紧密联系。通道是I/O传输发生时通过的入口,而缓冲区是这些数据传输的来源或目标。

对于离开缓冲区的传输,您想传递出去的数据被置于一个缓冲区,被传达到通道。对于传回缓冲区的传输,一个通道将数据放置在您所提供的缓冲区中。这种在协同对象(通常是您所写的对象以及一到多个 Channel 对象)之间进行的缓冲区数据传递是高效数据处理的关键。

概念上,缓冲区是包在一个对象内的基本数据元素数组。Buffer 类相比一个简单数组的优点 是它将关于数据的数据内容和信息包含在一个单一的对象中。Buffer 类以及它专有的子类定义了 一个用于处理数据缓冲区的 API。

所有的缓冲区都具有四个属性来提供关于其所包含的数据元素的信息,分别是:

容量(Capacity):缓冲区能够容纳的数据元素的最大数量。这一容量在缓冲区创建时被设定,并且永远不能 被改变。

上界(Limit):缓冲区的第一个不能被读或写的元素。或者说,缓冲区中现存元素的计数。

位置(Position):下一个要被读或写的元素的索引。位置会自动由相应的 get( )和 put( )函数更新。

标记(Mark):一个备忘位置。调用 mark( )来设定 mark = postion。调用 reset( )设定 position = mark。标记在设定前是未定义的(undefined)。

以上四个属性遵循的关系:0 <= mark <= position <= limit <= capacity;

 

java.nio 中的类被特意地设计为支持级联调用

 

通道(channel)是java.nio的第二个主要创新。它们既不是一个扩展也不是一项增强,而 是全新、极好的 Java I/O 示例,提供与 I/O 服务的直接连接。Channel 用于在字节缓冲区和位于通 道另一侧的实体(通常是一个文件或套接字)之间有效地传输数据。

//TODO

以上是关于NIO的主要内容,如果未能解决你的问题,请参考以下文章

Java NIO:IO与NIO的区别

IO 性能:Selector (NIO) vs AsynchronousChannel(NIO.2)

Java nio NonBlocking NIO

Java NIO:IO与NIO的区别

Java:NIO 和 NIO.2 到底有啥区别?

NIO 源码分析(03) 从 BIO 到 NIO