ByteBuffer初学

241 阅读2分钟
public static void main(String[] args) {
    byte[] bytes1 = "123".getBytes();
    byte[] bytes2 = "567".getBytes();
    ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
    log.info("position {}; limit {}; capacity {}; mark {}", buffer.position(), buffer.limit(), buffer.capacity(), buffer);
    buffer.put(bytes1);
    log.info("put:123 {}; ......mark:{}", bytes1, buffer);
    log.info("get:{}; mark:{}", buffer.get(), buffer);
    buffer.flip();   //读写交替
    log.info("flip......mark:{}", buffer);
    log.info("get:{}; mark:{}", buffer.get(), buffer);
    buffer.compact();
    log.info("compact......mark:{}", buffer);
    buffer.put(bytes2);
    log.info("put:567 {}; ......mark:{}", bytes2, buffer);
    buffer.flip();   //读写交替
    log.info("flip......mark:{}", buffer);
    log.info("get:{}; mark:{}", buffer.get(), buffer);
    buffer.clear();
    log.info("clear......mark:{}", buffer);
}
position 0; limit 1024; capacity 1024; mark java.nio.DirectByteBuffer[pos=0 lim=1024 cap=1024]
put:123 [49, 50, 51]; ......mark:java.nio.DirectByteBuffer[pos=3 lim=1024 cap=1024]
get:0; mark:java.nio.DirectByteBuffer[pos=4 lim=1024 cap=1024]
flip......mark:java.nio.DirectByteBuffer[pos=0 lim=4 cap=1024]
get:49; mark:java.nio.DirectByteBuffer[pos=1 lim=4 cap=1024]
compact......mark:java.nio.DirectByteBuffer[pos=3 lim=1024 cap=1024]
put:567 [53, 54, 55]; ......mark:java.nio.DirectByteBuffer[pos=6 lim=1024 cap=1024]
flip......mark:java.nio.DirectByteBuffer[pos=0 lim=6 cap=1024]
get:50; mark:java.nio.DirectByteBuffer[pos=1 lim=6 cap=1024]
clear......mark:java.nio.DirectByteBuffer[pos=0 lim=1024 cap=1024]
public static void main(String[] args) {
        byte[] bytes1 = "123".getBytes();
        byte[] bytes2 = "567".getBytes();
        ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
        buffer.put(bytes1);
        log.info("get:{}; mark:{}", buffer.get(), buffer);
        buffer.flip();   //读写交替
        log.info("flip......mark:{}", buffer);
        log.info("get:{}; mark:{}", buffer.get(), buffer);
        log.info("get:{}; mark:{}", buffer.get(), buffer);
        log.info("get:{}; mark:{}", buffer.get(), buffer);
        log.info("get:{}; mark:{}", buffer.get(), buffer);
//        log.info("get:{}; mark:{}", buffer.get(), buffer); // Exception in thread "main" java.nio.BufferUnderflowException
        buffer.compact();
        log.info("compact......mark:{}", buffer);
        buffer.put(bytes2);
        log.info("put:567 {}; ......mark:{}", bytes2, buffer);
        buffer.flip();   //读写交替
        log.info("flip......mark:{}", buffer);
        log.info("get:{}; mark:{}", buffer.get(), buffer);
        buffer.clear();
        log.info("clear......mark:{}", buffer);
    }
get:0; mark:java.nio.DirectByteBuffer[pos=4 lim=1024 cap=1024]
flip......mark:java.nio.DirectByteBuffer[pos=0 lim=4 cap=1024]
get:49; mark:java.nio.DirectByteBuffer[pos=1 lim=4 cap=1024]
get:50; mark:java.nio.DirectByteBuffer[pos=2 lim=4 cap=1024]
get:51; mark:java.nio.DirectByteBuffer[pos=3 lim=4 cap=1024]
get:0; mark:java.nio.DirectByteBuffer[pos=4 lim=4 cap=1024]
compact......mark:java.nio.DirectByteBuffer[pos=0 lim=1024 cap=1024]
put:567 [53, 54, 55]; ......mark:java.nio.DirectByteBuffer[pos=3 lim=1024 cap=1024]
flip......mark:java.nio.DirectByteBuffer[pos=0 lim=3 cap=1024]
get:53; mark:java.nio.DirectByteBuffer[pos=1 lim=3 cap=1024]
clear......mark:java.nio.DirectByteBuffer[pos=0 lim=1024 cap=1024]