NIO基础方法一

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();
        }
原文地址:https://www.cnblogs.com/guoyansi19900907/p/10961172.html