Java NIO 之 ByteBuffer 測試用例
阿新 • • 發佈:2017-10-01
bytebuffer java
分享一下,關於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
Java NIO 之 ByteBuffer 測試用例