package com.roc.nio;
import java.nio.IntBuffer;
import java.security.SecureRandom;
/**
* 用于对mark属性的测试
* 调用buffer.remak()时,会将当前的position值赋给remak属性,
* 保存当前操作的状态,然后get继续执行,当调用buffer.reset()时,会将之前当前的remark值赋予position,
* 实现状态的恢复.
* flip clear ( reset mark ) rewind
* @author lenovo
*
*/
public class BufferMark {
public static void main(String[] args) {
// TODO Auto-generated method stub
IntBuffer intBuffer = IntBuffer.allocate(10);
for(int i = 0;i<intBuffer.capacity();i++) {
int b = new SecureRandom().nextInt(20);
//此方法为相对方法(relative),他会导致position的变化
intBuffer.put(b);
//此方法是绝对方法(absolute),他的使用只会讲对应位置的值替换到,并不会更改position
//intBuffer.put(i,new SecureRandom().nextInt(20));
System.out.print(b+" ");
}
//翻转buffer
intBuffer.flip();
System.out.println("");
System.out.println("读取到的数据:"+intBuffer.get());
System.out.println("读取到的数据:"+intBuffer.get());
System.out.println("1:buffer position="+intBuffer.position()+" limit="+intBuffer.limit());
//标记buffer状态
intBuffer.mark();
System.out.println("2: buffer position="+intBuffer.position()+" limit="+intBuffer.limit());
System.out.println("读取到的数据:"+intBuffer.get());
System.out.println("读取到的数据:"+intBuffer.get());
System.out.println("3: buffer position="+intBuffer.position()+" limit="+intBuffer.limit());
//恢复buffer状态
intBuffer.reset();
System.out.println("读取到的数据:"+intBuffer.get());
System.out.println("读取到的数据:"+intBuffer.get());
System.out.println("4: buffer position="+intBuffer.position()+" limit="+intBuffer.limit());
/**
* 4 10 3 11 17 5 18 10 2 6
读取到的数据:4
读取到的数据:10
1: buffer position=2 limit=10
2: buffer position=2 limit=10
读取到的数据:3
读取到的数据:11
3: buffer position=4 limit=10
读取到的数据:3
读取到的数据:11
4: buffer position=4 limit=10
*/
}
}
Nio Buffer中mark方法的作用解析
最新推荐文章于 2024-03-30 21:22:20 发布