测试对ByteBuffer的position和limit的影响
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
public class Test {
public static void main(String[] args) throws Exception {
ByteBuffer bf = ByteBuffer.allocate(100);
bf.put("abc".getBytes());
System.out.println("position:"+bf.position()+" limit:"+bf.limit());
// bf.flip();
System.out.println("position:"+bf.position()+" limit:"+bf.limit());
bf.limit(50);
Charset charset = Charset.forName("UTF-8");
CharsetDecoder charsetDecoder = charset.newDecoder();
CharBuffer charBuffer = charsetDecoder.decode(bf);
System.out.println(charBuffer.position()+"limit:"+charBuffer.limit());
System.out.println("position:"+bf.position()+" limit:"+bf.limit());
bf.flip();
System.out.println("position:"+bf.position()+" limit:"+bf.limit());
}
}
测试结果为:
position:3 limit:100
position:3 limit:100
0limit:47
position:50 limit:50
position:0 limit:50
可以看到decode方法的意义是解码一个ByteBuffer从position位置到limit位置的信息
解码完成后会将position位置移动到解码终点即limit的位置