关于java:Java-NIO-基础二-缓冲区

40次阅读

共计 1107 个字符,预计需要花费 3 分钟才能阅读完成。

Buffer 家族

Buffer 实质上是治理着根本元数对象的数组

Buffer 根本属性

/** Invariants: mark <= position <= limit <= capacity */

// 用来长期标记 position 的地位,便于还原
private int mark = -1;
// 行将读取或写入的开始地位
private int position = 0;
// 上界,缓冲区现有元素的数量
private int limit;
// 缓存区的最大容量,初始化时设定,不能扭转
private int capacity;

Buffer 根本 API

package java.nio;

public abstract class Buffer {
    // 获取缓冲区容量
    public final int capacity()
    // 获取以后地位
    public final int position()
    // 设置一个新的 position
    public final Buffer position(int newPosition)
    // 获取上界地位
    public final int limit()
    // 设置一个新的上界地位,然而不能小于 0 或超过 capacity
    public final Buffer limit(int newLimit)
    // 标记以后 position
    public final Buffer mark()
    // 复原标记的 position
    public final Buffer reset()
    // 从新设置 mark=-1 position=0 limit=capacity,读取完数据调用,数据没有被清理,写入的数据会笼罩之前的数据
    public final Buffer clear()
    // 翻转缓冲区,使写入的数据进入可读状态
    public final Buffer flip()
    // 重置读写地位,将 position 设为 0,mark 设为 - 1 抛弃
    public final Buffer rewind()
    // 获取以后地位好缓冲区上界 Limit 还有多少元素
    public final int remaining()
    // 判断 position 是否曾经达到 limit 上界,用于判断是否曾经全副读取结束
    public final boolean hasRemaining()
    // 判断以后缓冲区是否是只读的
    public abstract boolean isReadOnly();}

填充 Hello 后的缓冲区

ByteBuffer buffer=ByteBuffer.allocate(10);
buffer.put((byte)'H').put((byte)'e').put((byte)'l').put((byte)'l').put((byte)'o');

调用 flip 翻转后的缓冲区

buffer.flip();

正文完
 0