购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3.9 还原缓冲区的状态

final Buffer clear()方法的作用:还原缓冲区到初始的状态,包含将位置设置为0,将限制设置为容量,并丢弃标记,即“一切为默认”。

clear()方法的内部源代码如下:

public final Buffer clear() {
    position = 0;
    limit = capacity;
    mark = -1;
    return this;
}

clear()方法的主要使用场景是在对缓冲区存储数据之前调用此方法。例如:

buf.clear();       // 准备开始向缓冲区中写数据了,缓冲区的状态要通过clear()进行还原
in.read(buf);   // 从in开始读数据,将数据写入buf中

需要注意的是,clear()方法“不能真正清除”缓冲区中的数据,虽然从名称来看它似乎能够这样做,这样命名是因为它在多数情况下确实有清除数据的作用,那么怎么“清除”数据呢?例如,调用代码“buf.clear();”后将缓冲区的状态进行还原,包含将position(位置)归0,再执行写入新数据的代码,将最新版的数据由索引位置0开始覆盖,这样就将缓冲区中的旧值用新值覆盖了,相当于数据被清除了。

示例代码如下:

public class Test8 {

public static void main(String[] args) {
    byte[] byteArray = new byte[] { 1, 2, 3 };

    ByteBuffer bytebuffer = ByteBuffer.wrap(byteArray);

    bytebuffer.position(2);
    bytebuffer.limit(3);
    bytebuffer.mark();

    bytebuffer.clear();

    System.out.println("bytebuffer.position=" + bytebuffer.position());
    System.out.println();

    System.out.println("bytebuffer.limit=" + bytebuffer.limit());
    System.out.println();
    try {
        bytebuffer.reset();
    } catch (java.nio.InvalidMarkException e) {
        System.out.println("bytebuffer mark丢失");
    }
}
}

程序运行结果如下: 2TfVMxGinv5YVX5Q0MSvqJV/XEaCOQP4c3Cf6Ygb8iwafwfe62XF4DivaLjzUDKy

bytebuffer.position=0

bytebuffer.limit=3

bytebuffer mark丢失
点击中间区域
呼出菜单
上一章
目录
下一章
×