1. Buffer是一种数据结构
buffer是一种数据结构,类似于array,其中存储的对象是基本类型,但它的访问形式不同于array,它有一下3个属性,用于访问时使用:
| property | desc |
|---|---|
| capacity | 表示当前buffer的最大可存放的元素个数 |
| limit | 表示当前buffer中第一个不可访问的元素的索引 |
| position | 表示当前buffer中下一个将要读到的元素的索引 |
使用以上3个属性就可以访问这个类array的结构,主要作用是作为一个可复用的一块区域,将整个空间分为可用和不可用两部分
2. Buffer的子类实现规范
每个子类都要实现2种类别的get和put方法
-
Relative
从当前的position读取数据,读取多少数据,position将变化多少
-
Absolute
根据传入的
index参数读取数据,不影响position
3. Mark & Reset
mark一般与reset成对出现的,mark是一个标记了的index,reset的时候可以将position恢复到这个特殊的index
mark满足这样的不变式: ,当
position或者limit变化导致设置的mark不满足这个不变式,则此时的mark将会丢弃
4. mark,position,limit,capacity不变式
5. 其他操作方式
| method | desc | property的变化 |
|---|---|---|
clear |
makes a buffer ready for a new sequence of channel-read or relative put
|
|
flip |
makes a buffer ready for a new sequence of channel-write or relative get
|
|
rewind |
makes a buffer ready for re-reading the data that it already contains |
code example:
clear:
buf.clear(); // Prepare buffer for reading
in.read(buf); // Read data
flip:
buf.put(magic); // Prepend header
in.read(buf); // Read data into rest of buffer
buf.flip(); // Flip buffer
out.write(buf); // Write header + data to channel
rewind:
out.write(buf); // Write remaining data
buf.rewind(); // Rewind buffer
buf.get(array); // Copy data into array











网友评论