NIO-buffer各个属性介绍

2018-11-03  本文已影响12人  SteveGuRen

测试limit的作用

    /**
     * put测试以及limit、capacity测试
     */
    public static void putTest() {
        char[] charArray = new char[] {'a', 'b', 'c', 'd'};
        CharBuffer buffer = CharBuffer.wrap(charArray);
        //此时capacity和limit都为4
        System.out.println("CharBuffer.capacity:" + buffer.capacity());
        System.out.println("CharBuffer.limit:" + buffer.limit());
        //设置limit为3
        buffer.limit(3);
        //通过put设置数据
        buffer.put('a');
        buffer.put('b');
        buffer.put('c');
        //下面这一行报错
        buffer.put('d');
        buffer.put('e');
        
    }

测试position的作用

    public static void positionTest() {
        char[] charArray = new char[] {'a', 'b', 'c', 'd'};
        CharBuffer buffer = CharBuffer.wrap(charArray);
        //此时capacity和limit都为4
        System.out.println("CharBuffer.capacity:" + buffer.capacity());
        System.out.println("CharBuffer.position:" + buffer.position());
        //设置当前存储数据的position
        buffer.position(2);
        System.out.println("CharBuffer.capacity:" + buffer.capacity());
        System.out.println("CharBuffer.position:" + buffer.position());
        //原来c的位置被替换为e,并且position下移到下一个位置
        buffer.put('e');
        for(char a : charArray) {
            System.out.println(a);
        }
        System.out.println("CharBuffer.position:" + buffer.position());
        //原来d的位置被替换为f,并且position下移到下一个位置
        buffer.put('f');
        for(char a : charArray) {
            System.out.println(a);
        }
        System.out.println("CharBuffer.position:" + buffer.position());
        //已经满了,无法put
        buffer.put('g');
        
    }

mark和reset的作用

通过mark和reset可以很方便的在原来的地方重新写入或者读取缓存,这个特性在报文解析时很方便,如果是想读取ip报文内容,然后重写ip报文内容的时候,就显得十分方便;我们在ip报文头的位置设置一下mark,然后重这个位置开始读取,然后reset之后,在这个位置写入我们新加入的位置,这样就达到了篡改报文数据的目的

    /**
     * mark记录当前position的位置, reset重置上次记录的position位置
     */
    public static void markAndResetTest() {
        char[] charArray = new char[] {'a', 'b', 'c', 'd'};
        CharBuffer buffer = CharBuffer.wrap(charArray);
        //此时capacity和limit都为4
        System.out.println("CharBuffer.capacity:" + buffer.capacity());
        printArray(charArray);
        
        
        buffer.position(1);
        //记录当前开始设置数据的position
        buffer.mark();
        buffer.put('e');
        buffer.put('f');
        buffer.put('g');
        printArray(charArray);
        System.out.println("CharBuffer.remaining:" + buffer.remaining());
        //重置到上次开始存数据的位置
        buffer.reset();
        buffer.put('h');
        buffer.put('i');
        buffer.put('j');
        printArray(charArray);
        System.out.println("CharBuffer.remaining:" + buffer.remaining());
        
    }


    private static void printArray(char[] charArray) {
        for(char a : charArray) {
            System.out.print(a);
        }
        System.out.println();
    }
上一篇 下一篇

猜你喜欢

热点阅读