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

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();

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理