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丢失"); } } }
程序运行结果如下:
bytebuffer.position=0 bytebuffer.limit=3 bytebuffer mark丢失