Java NIO 之 ByteBuffer 測試用例


分享一下,關於ByteBuffer的一些非常基礎的測試用例

package xingej.buffer.test001;

import java.nio.ByteBuffer;
//注意:1、原生JAVA NIO的ByteBuffer的緩沖區是不能添加字符串的,其實,從名字也可以看出來,是Byte + Buffer =>ByteBuffer
//也就是說,ByteBuffer是針對字節的緩存區
public class ByteBufferTest {

    public static void main(String[] args) {
        //分配8個字節的緩沖區
        ByteBuffer buffer = ByteBuffer.allocate(8);
        
        //打印出初始狀態下position, limit, capacity的值
        System.out.println("---->position:\t" + buffer.position() + "\n---->limit:\t" + buffer.limit() + "\n---->capacity:\t" + buffer.capacity());

        //-------------------------------測試-----put----操作---------------------------------------------------------------
        System.out.println("-----put---操作---前----------->position:\t" + buffer.position() + "  ---->limit:\t" + buffer.limit() + "  ---->capacity:\t" + buffer.capacity());
        //往緩沖區里,添加一個字符“h”,再查看position, limit, capacity的值
        buffer.put("h".getBytes());
        System.out.println("-----put---操作---后----------->position:\t" + buffer.position() + "  ---->limit:\t" + buffer.limit() + "  ---->capacity:\t" + buffer.capacity());

        //-------------------------------測試-----flip----操作---------------------------------------------------------------
        System.out.println("\n-----flip---操作---前----------->position:\t" + buffer.position() + "  ---->limit:\t" + buffer.limit() + "  ---->capacity:\t" + buffer.capacity());
        buffer.flip();
        System.out.println("-----flip---操作---后----------->position:\t" + buffer.position() + "  ---->limit:\t" + buffer.limit() + "  ---->capacity:\t" + buffer.capacity());

        //-------------------------------測試-----get----操作---------------------------------------------------------------
        System.out.println("\n-----get---操作---前----------->position:\t" + buffer.position() + "  ---->limit:\t" + buffer.limit() + "  ---->capacity:\t" + buffer.capacity());
        System.out.println("-----從緩存里取數據------:\t" + buffer.get());
        System.out.println("-----get---操作---后----------->position:\t" + buffer.position() + "  ---->limit:\t" + buffer.limit() + "  ---->capacity:\t" + buffer.capacity());


        //-------------------------------測試-----limit----操作---------------------------------------------------------------
        //重新設定緩存可以存儲的容量大小是1個字節,
        //很明顯,如果實際存儲的字節大小,超過1個字節的話,就會拋異常的
        System.out.println("\n-----limit---操作---前----------->position:\t" + buffer.position() + "  ---->limit:\t" + buffer.limit() + "  ---->capacity:\t" + buffer.capacity());
        buffer.limit(1);
        
        try{
            //因為,緩存里已經存儲里h 1個字節,因此,ell是不會存儲到緩存里的,而且會拋異常的
            buffer.put("ell".getBytes());
        } catch (Exception e) {
//            e.printStackTrace();
        }
        
        System.out.println("-----limit---操作---后----------->position:\t" + buffer.position() + "  ---->limit:\t" + buffer.limit() + "  ---->capacity:\t" + buffer.capacity());

        //-------------------------------測試-----clear----操作---------------------------------------------------------------
        System.out.println("\n-----clear---操作---前----------->position:\t" + buffer.position() + "  ---->limit:\t" + buffer.limit() + "  ---->capacity:\t" + buffer.capacity());
        buffer.clear();
        System.out.println("-----clear---操作---后----------->position:\t" + buffer.position() + "  ---->limit:\t" + buffer.limit() + "  ---->capacity:\t" + buffer.capacity());
    }

}


總結:

    put操作、get操作 改變的是position的值

    

    buffer的不足之處,就是,讀或者寫之前,一般需要調用flip()方法。


測試用例已經上傳到git上

https://github.com/xej520/xingej-nio








本文出自 “XEJ分布式工作室” 博客,請務必保留此出處http://xingej.blog.51cto.com/7912529/1970073

关注微信公众号

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com