Nio-slice法はflip法の書き忘れに代わる役割を解決する

1257 ワード

filp,slice,duplicate

  • filp:英語で
  • を反転
  • slice:スライス
  • filpは を切り替えるためのものである.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の誤りを忘れることを避けた.