NIO基础

问:什么是NIO?数组

答:对I/O的byte[]或char[]进行封装,采用ByteBuffer类来操做数据。简而言之就是:比I/O更牛逼的知识点;咱们给这个知识点取名为NIO。spa

问:牛逼在哪?code

答:多了一个缓冲区的概念.这样对byte[]或char[]这种数组的处理就更灵活了。blog

问:缓冲区怎么实现的?索引

答:jdk中有一个Buffer抽象类,这个抽象类中有七个实现类,一样是是抽象类;ci

他们分别是ByteBuffer,CharBuffer,DoubleBuffer,FloatBuffer,IntBuffer,LongBuffer,ShortBuffer.get

这七个抽象类中都有一个静态的wrap方法,做用是将数组放入缓冲区中,来构建存储不一样数据类型的缓冲区。源码

实例:it

int[] intArray={1,2,3,4};
IntBuffer intBuffer=IntBuffer.wrap(intArray);

问:Buffer都提供了哪些核心的东西?io

答:Buffer提供了四个字段来操做缓冲区。

capacity:容量

limit:限制

position:位置

mark:标记。

源码:

问:请介绍capacity?

答:缓冲区的元素数量;应为数组的元素数量是不能变得,因此capacity也是不能变得。可是能够用Buffer得capacity()方法获取元素。

int[] intArray={1,2,3,4};
IntBuffer intBuffer=IntBuffer.wrap(intArray);
System.out.println("intBuffer="+intBuffer.capacity());

问:请介绍limit?

缓冲区中限制第一个不能读取或写入得元素得索引(从0开始);因而可知limit不能为0,不能大于capacity.

实例:

int[] intArray={1,2,3,4};
IntBuffer intBuffer=IntBuffer.wrap(intArray);
System.out.println("capacity="+intBuffer.capacity());
System.out.println("默认limit:"+intBuffer.limit());
intBuffer.limit(2);
System.out.println(intBuffer.get(0));
System.out.println(intBuffer.get(1));
System.out.println(intBuffer.get(2));

执行到最后一行会报异常,由于超出了限制范围。

问:请介绍position?

答:读取到或者写入到元素得位置;

int[] intArray={1,2,3,4};
        IntBuffer intBuffer=IntBuffer.wrap(intArray);
        System.out.println("默认位置:"+intBuffer.position());
        intBuffer.position(2);//从2位置开始读取或写入
        System.out.println("修改后得位置:"+intBuffer.position());
        intBuffer.put(6);
        System.out.println("添加元素后得位置:"+intBuffer.position());
        for(int i=0;i<intArray.length;i++){
            System.out.print(intArray[i]+" ");
        }

问:market干什么得?

答:在market这个动做的时候记录这个position得值,后面不管position如何变更,只要执行reset()方法,就会把position设置成标记时候得market值。

没有market得缓冲区,reset()会抛异常。

int[] intArray={1,2,3,4};
        IntBuffer intBuffer=IntBuffer.wrap(intArray);
        intBuffer.position(2);
        intBuffer.mark();
        System.out.println("标记的position:"+intBuffer.position());//2
        intBuffer.position(3);
        System.out.println("变更后得position:"+intBuffer.position());//3
        intBuffer.reset();
        System.out.println("重置以后的position:"+intBuffer.position());//2
相关文章
相关标签/搜索