1.remaining();返回当前位置与limit之间得元素数。
int[] intArray={1,2,3,4}; IntBuffer intBuffer=IntBuffer.wrap(intArray); intBuffer.limit(3); intBuffer.position(1); System.out.println(intBuffer.remaining());
2.isDirect() 判断是否为直接缓冲区。
ByteBuffer byteBuffer=ByteBuffer.allocateDirect(100);
System.out.println(byteBuffer.isDirect());
3.clear()还原缓冲区得状态,是状态,不是数据;比如将position=0.market丢失掉。
byte[] byteArray=new byte[]{1,2,3}; ByteBuffer byteBuffer=ByteBuffer.wrap(byteArray); byteBuffer.position(2); byteBuffer.limit(3); byteBuffer.mark(); byteBuffer.clear(); System.out.println("position:"+byteBuffer.position()+";limit:"+byteBuffer.limit()); try { byteBuffer.reset(); } catch (Exception e) { System.out.println("market已经丢失"); }
4.flip() 向缓冲区写入一些数据后,下一步直接读取缓冲区中得数据之前,以改变limit与position得值。
byte[] byteArray=new byte[]{1,2,3}; ByteBuffer byteBuffer=ByteBuffer.wrap(byteArray); byteBuffer.position(2); byteBuffer.mark(); byteBuffer.flip(); System.out.println("position:"+byteBuffer.position()+";limit:"+byteBuffer.limit()); try { byteBuffer.reset(); } catch (Exception e) { System.out.println("market已经丢失"); }
5.hasArray()判断此缓冲区是否具有可访问得底层实现数组。
ByteBuffer byteBuffer=ByteBuffer.allocate(100); byteBuffer.put((byte) 1); byteBuffer.put((byte) 2); System.out.println(byteBuffer.hasArray()); ByteBuffer byteBuffer2=ByteBuffer.allocateDirect(100); byteBuffer2.put((byte) 1); byteBuffer2.put((byte) 2); System.out.println(byteBuffer2.hasArray());
6.hasRemaining() 判断当前位置与限制之间是否有元素。
byte[] byteArray=new byte[]{1,2,3}; ByteBuffer bytebuffer=ByteBuffer.wrap(byteArray); bytebuffer.limit(3); bytebuffer.position(2); System.out.println(bytebuffer.hasRemaining()+";"+bytebuffer.remaining());
7.rewind() position置为0,标记清除掉,limit不变。
8.clear() position置为0,limit=capacity,market=-1.清除缓冲区得状态。
9.List.toArrat(T[]) 转成数组。
ByteBuffer buffer1=ByteBuffer.wrap(new byte[]{'a','b','c'}); ByteBuffer buffer2=ByteBuffer.wrap(new byte[]{'x','y','z'}); ByteBuffer buffer3=ByteBuffer.wrap(new byte[]{'1','2','3'}); List<ByteBuffer> list=new ArrayList<ByteBuffer>(); list.add(buffer1); list.add(buffer2); list.add(buffer3); ByteBuffer[] byteBufferArray=new ByteBuffer[list.size()]; list.toArray(byteBufferArray); System.out.println(byteBufferArray.length); for(int i=0;i<byteBufferArray.length;i++){ ByteBuffer eachByteBuffer=byteBufferArray[i]; while (eachByteBuffer.hasRemaining()) { System.out.print((char) eachByteBuffer.get()); } System.out.println(); }