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()); } } }
相关文章推荐
- Ajax+HTML+Controller(MVC模式下)实现文件异步上传
- HTmlTableTOExcel
- 5种方法去掉HTML中Inline-Block元素之间的空白
- ExtJs 入门教程十一[网格面板:GridPanel]
- jquery生成二维码
- JQuery--使用autocomplete控件进行自动输入完成(相当于模糊查询)
- jsp两种注释区别,<%%>和<%!%>的区别
- AngularJS笔记
- JS合并的必要性分析
- 使用js的ajax方法读取txt文本里面的JSON数据并追加到Html元素节点上
- js 同一种类 变色
- 菊花文javascript实现
- JavaScript获取页面宽度高度大全
- js的定时器问题
- 前端开发利器webStorm配置使用
- 百度将取消referer关键词显示
- HLSL Asm Shader Reference
- Facebook React Native开发入门
- Reference for HLSL(HLSL参考)
- org.tinygroup.htmlparser-Html解析器