美文网首页
NIO-buffer各个属性介绍

NIO-buffer各个属性介绍

作者: SteveGuRen | 来源:发表于2018-11-03 08:00 被阅读12次
  • limit(限制),第一个不应该读取或写入元素的index
  • capacity,代表着缓冲区的大小
  • position,是下一个读取或者写入操作的index
  • remaining,剩余空间大小,remaining = limit - position
  • mark,记录当前的position位置,mark如果在大于position或者limit时,会被丢弃
  • reset方法,重置当前position为上次的position位置

测试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();
    }

相关文章

  • NIO-buffer各个属性介绍

    limit(限制),第一个不应该读取或写入元素的index capacity,代表着缓冲区的大小 position...

  • 分享web前端iframe相互调用的6种方法

    如果你采用嵌入iframe机制,不可避免的要用到各个iframe页面之间方法和属性的相互调用。这里介绍的是兼容各个...

  • CSS各个属性作用

    大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就...

  • AttributedString的各个属性

    注:下面一些例子我没写进来,想详细了解可以去这里看看我也不知道谁是原创,找了个排版好看点的分享一下 1.NSFon...

  • 属性介绍

    wireFormat.maxFrameSize “一个完整消息”的最大数据量(单位为byte)

  • 属性介绍

    话务精灵第五章,这只精灵叫索伊,还是特啊,我的,一张得像老虎我,右下角又像猫,还有对翅膀火红色的,所有蛇没有,头上...

  • NavigationView设置item属性的各个属性

    NavigationView的样式最大宽度 Item的高度 NavigationView 里设置theme 图标颜...

  • UIScrollView的基本使用

    UIScrollView 基本的属性 常用的属性 各个属性的图解 Scrollview的重要属性 contentS...

  • SpringCloud各个部件介绍

    目录 一、业务场景介绍 二、Spring Cloud核心组件:Eureka 三、Spring Cloud核心组件:...

  • 相对布局的各个属性

    下面是RelativeLayout各个属性 android:layout_above="@id/xxx" --将控...

网友评论

      本文标题:NIO-buffer各个属性介绍

      本文链接:https://www.haomeiwen.com/subject/itohxqtx.html