NIO-Buffer

缓冲区-Buffer

一个Buffer对象是固定数量的数据的容器。其作用是一个存储器,或者分段运输区,在这里数据可被存储并在之后用于检索。

下图是Buffer的类层次图。在顶部是通用Buffer类。Buffe定义所有缓冲区类型共有的操作,无论是它们所包含的数据类型还是可能具有的特定的行为。

Buffer类及其子类

缓冲区基础

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

缓冲区属性

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

容量(Capacity)

缓冲区能够容纳的数据元素的最大个数。这个容量在缓冲区创建的时候就被指定,并且无法改变。

1
2
3
官方说明
<p> A buffer's <i>capacity</i> is the number of elements it contains. The
* capacity of a buffer is never negative and never changes. </p>

上限(Limit)

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

1
2
3
4
官方说明
<p> A buffer's <i>limit</i> is the index of the first element that should
* not be read or written. A buffer's limit is never negative and is never
* greater than its capacity. </p>

位置(Position)

下一个即将要被读或者写的元素的位置。位置会自动由响应的get()和put()函数更新。

1
2
3
4
官方说明
<p> A buffer's <i>position</i> is the index of the next element to be
* read or written. A buffer's position is never negative and is never
* greater than its limit. </p>

标记(Mark)

一个备忘位置。调用mark()来设定mark = position。调用reset()设定position = mark。标记在设定前是未定义的。一旦被定义,其值用不可能大于当前的position和非负数。

1
2
3
4
5
6
7
8
官方说明
<p> A buffer's <i>mark</i> is the index to which its position will be reset
* when the {@link #reset reset} method is invoked. The mark is not always
* defined, but when it is defined it is never negative and is never greater
* than the position. If the mark is defined then it is discarded when the
* position or the limit is adjusted to a value smaller than the mark. If the
* mark is not defined then invoking the {@link #reset reset} method causes an
* {@link InvalidMarkException} to be thrown.

这四个属性之间总是遵循下面的关系:
0 <= mark <= postion <= limit <= capacity

0%