package test.date701;
import java.nio.DoubleBuffer;
/**
* buffer.compact()方法解释:(此处构建一个队列,保持先进先出,类似于环形缓冲)(按顺序排列元素)
* 压缩此缓冲区(可选操作)。
* 将缓冲区当前位置和界限之间的 double(如果有)复制到缓冲区的开始处。即将索引 p = position() 处的 double 复制到索引 0 处,将索引 p + 1 处的 MinimalHTMLWriter.htm.ttx 复制到索引 1 处,依此类推,直到将索引
* limit() - 1 处的 double 复制到索引 n = limit() - 1 - p 处。然后将缓冲区的位置设置为 n+1,并将其界限设置为其容量。如果已定义了标记,则丢弃它。
* 将缓冲区的位置设置为复制的 double 的数量,而不是零,以便调用此方法后可以紧接着调用另一个相对 put 方法。
*/
public class Test701 {
private static DoubleBuffer buffer;
private static int capcity = 10;
public static void main(final String[] args) {
createBuffer();
printBuffer();
}
private static void createBuffer() {
buffer = DoubleBuffer.allocate(capcity);
int i = 0;
while (i < 1000) {// 把0至999的1000个数,按照顺序依次存入capcity=10的Buffer中
if (buffer.position() == buffer.capacity()) {// 存满之后,把最新的capcity-1个数,覆盖最旧的capcity-1个数
buffer.position(1);// 把position设为1
buffer.compact();// 把position为123456789的数据覆盖position为012345678上的数据,之后position自动变成9
buffer.put(i);// 在position=9存入新添加的数据,存入后position=10==capacity
/* 这样就保证了最新的数据永远在buffer的position=capacity-1处,最旧的数据永远在position=0处 */
} else {// 还没存满capcity个数
buffer.put(i);
}
i++;
}
}
private static void printBuffer() {
buffer.flip();
for (int i = 0; i < buffer.capacity(); i++) {
System.out.println(buffer.get());
}
}
}
java.nio.Buffer设置绝对队列(buffer的position=0为队尾,position=capcity-1为队头)
最新推荐文章于 2023-01-15 13:28:21 发布