Java Buffer

1. Buffer是一种数据结构

buffer是一种数据结构,类似于array,其中存储的对象是基本类型,但它的访问形式不同于array,它有一下3个属性,用于访问时使用:

property desc
capacity 表示当前buffer的最大可存放的元素个数
limit 表示当前buffer中第一个不可访问的元素的索引
position 表示当前buffer中下一个将要读到的元素的索引

使用以上3个属性就可以访问这个类array的结构,主要作用是作为一个可复用的一块区域,将整个空间分为可用和不可用两部分

2. Buffer的子类实现规范

每个子类都要实现2种类别的getput方法

  1. Relative

    从当前的position读取数据,读取多少数据,position将变化多少

  2. Absolute

    根据传入的index参数读取数据,不影响position

3. Mark & Reset

mark一般与reset成对出现的,mark是一个标记了的index,reset的时候可以将position恢复到这个特殊的index

mark满足这样的不变式: position>m>0,当position或者limit变化导致设置的mark不满足这个不变式,则此时的mark将会丢弃

4. mark,position,limit,capacity不变式

0<mark<position<limit<capacity

5. 其他操作方式

method desc property的变化
clear makes a buffer ready for a new sequence of channel-read or relative put limit\leftarrow capacity, position\leftarrow 0
flip makes a buffer ready for a new sequence of channel-write or relative get limit \leftarrow position, position\leftarrow 0
rewind makes a buffer ready for re-reading the data that it already contains position\leftarrow 0

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容