您的位置:首页 > Web前端

java.nio.Buffer设置绝对队列(buffer的position=0为队尾,position=capcity-1为队头)

2015-06-30 15:24 260 查看
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());
		}
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: