ByteBuf

ByteBuf作为java NIO中ByteBuffer的Netty版,其语义与ByteBuffer相同,只是操作方式更加丰富

基本操作


        ByteBuf buf = Unpooled.buffer(128);
        List<Object> objects = new LinkedList<>();
        objects.add(buf.capacity());
        objects.add(buf.isReadable());
        objects.add(buf.isDirect());
        objects.add(buf.isReadable());
        objects.forEach(System.out::println);

        buf.writeByte('a');
        buf.writeByte('b');
        buf.writeByte('c');
        System.out.println(buf.writerIndex());
        System.out.println(buf.readerIndex());
        System.out.println(buf.readableBytes());

        assert 'a' == buf.readByte();
        assert 'b' == buf.readByte();
        assert 'c' == buf.readByte();

        buf.readerIndex(0);
        buf.slice(0,3);

        buf.release();

ByteProcess


        ByteBuf buf = Unpooled.buffer(128);
        buf.writeCharSequence("abc d \re \n f \b c! ?", StandardCharsets.UTF_8);
        int i = 0;
        int last = 0;

        while (-1 != (i = buf.forEachByte(b -> b != 'c'))) {
            if (i > last) {
                byte[] bytes = new byte[i - last];
                buf.readBytes(buf,i,last);
                System.out.println(new String(bytes));
                buf.readerIndex(i + 1);
            }
            last = i;
        }

        buf.readerIndex(0);
        buf.forEachByte(ByteProcessor.FIND_LF);
        

UnPooled


        byte[] bytes1 = "hello".getBytes(StandardCharsets.US_ASCII);
        byte[] space = " ".getBytes(StandardCharsets.US_ASCII);
        byte[] bytes2 = "world".getBytes(StandardCharsets.US_ASCII);
        ByteBuf buf = Unpooled.wrappedBuffer(bytes1,space,bytes2);
        int len = bytes1.length + bytes2.length + space.length;
        byte[] helloWorld = new byte[len];
        buf.readBytes(helloWorld,0,len);
        System.out.println(new String(helloWorld));

        buf.readerIndex(0);

        ByteBuf buf3_14 = Unpooled.copyFloat(3.14f);

        ByteBuf buf2 = Unpooled.wrappedBuffer(buf,buf3_14);

        buf2.readerIndex(len);
        assert "3.14" == buf2.readFloat() + "";

    }