Nio-slice法はflip法の書き忘れに代わる役割を解決する
1257 ワード
filp,slice,duplicate
を切り替えるためのものである.Bufferを作成する場合は書き込みモードである、読み取りを行うには切り替えが必要である.切り替え時に主にBufferのpositionとlimit.を変更する.public class Test {
public static void main(String[] args) {
ByteBuffer allocate = ByteBuffer.allocate(16);
allocate.putInt(1);
allocate.flip();
System.out.println(allocate.getInt());
}
}
sliceは
Buffer
の内容を共有するBufferを作成し、slice
の修正は Buffer
、Position、Limit、capacityに直接フィードバックする.主に親Bufferを切り替えない場合に使用し、
この使用方法は、
RocketMq
に記載されているpublic class SliceTest {
public static void main(String[] args) {
ByteBuffer allocate = ByteBuffer.allocate(16);
// 1
ByteBuffer slice = allocate.slice();
slice.position(0);
slice.putInt(1);
// 2
ByteBuffer two = allocate.slice();
two.position(4);
two.putInt(2);
System.out.println(allocate.getInt());// 1
System.out.println(allocate.getInt());// 2
}
}
作成したByteBufferは直接使用するのではなく、共有するsliceによって修正され、sliceの修正はallocateの内容に直接フィードバックされ、
filp
を省く.filp
の誤りを忘れることを避けた.