NIO学习笔记(1)

作者: 罗曼蒂克 | 来源:发表于2017-05-10 17:45 被阅读89次
    1. NIO:(New IO/No blocking IO)非阻塞式IO
    2. 新特性:面向缓冲区,Channel,Selector

    缓冲区

    1. 缓冲区 buffer在java NIO中负责数据的存取,缓冲区就是数组,用于存储不同数据类型的数据
    2. 根据数据类型(布尔除外)提供了相应类型的缓冲区
    3. ByteBuffer
    4. CharBuffer
    5. ShortBuffer
    6. IntBuffer
    7. LongBuffer
    8. FloatBuffer
    9. DoubleBuffer
    10. 上述缓冲区的管理方式几乎一致,通过allocate()获取缓冲区
    11. 缓冲区存取数据的两个核心方法:
    12. put():存入数据到缓冲区
    13. get():获取缓冲区中的数据
    14. 缓冲区中的四个核心属性
    15. capacity:容量,表示缓冲区中最大的存储数据容量,一旦声明不能改变
    16. limit:界限,表示缓冲区中可以操作数据的大小
    17. position:位置,表示缓冲区正在操作数据的位置
    18. mark:标记,记录当前position,
    19. 常用方法
    20. flip()翻转模式,从写转为读模式
    21. rewind()可重复读
    22. clear()清空缓冲区,但是缓冲区中的数据依然存在,但是处于被遗忘状态,数据依然存在,只position,limit回到初始状态
    23. mark()标记
    24. reset()恢复position到mark位置
    import org.junit.Test;
    
    import java.nio.ByteBuffer;
    
    /**
     * Created by kun on 2017/5/10.
     */
    public class Test1 {
        ByteBuffer buffer=null;
        @Test
        public void test() {
            String hello="hello,NIO,中文呢";
            buffer= ByteBuffer.allocate(1024);
            pringProperties("allocate");
    
            //存储数据到buffer
            buffer.put(hello.getBytes());
            pringProperties("put");
            //切换为读取模式
            buffer.flip();
            pringProperties("flip");
    
            //读取一部分数据
            byte[] dst=new byte[5];
            buffer.get(dst,0,5);
            System.out.println(new String(dst));
            pringProperties("get");
            pringProperties("mark");
            buffer.mark();
            //继续读
            byte[] dst2=new byte[4];
            buffer.get(dst2,0,4);
            System.out.println(new String(dst2));
            //反复读
            buffer.reset();
            pringProperties("回到标记位置reset");
    
    
            //回到初始位置,读取所有
            buffer.rewind();
            pringProperties("rewind");
            byte[] dst3=new byte[buffer.limit()];
            buffer.get(dst3);
            System.out.println(new String(dst3));
    
    /**
                    ---------allocate()---------
                    limit:1024,capacity:1024,position:0
                    ---------put()---------
                    limit:1024,capacity:1024,position:19
                    ---------flip()---------
                    limit:19,capacity:1024,position:0
                    hello
                    ---------get()---------
                    limit:19,capacity:1024,position:5
                    ---------mark()---------
                    limit:19,capacity:1024,position:5
                    ,NIO
                    ---------回到标记位置reset()---------
                    limit:19,capacity:1024,position:5
                    ---------rewind()---------
                    limit:19,capacity:1024,position:0
                    hello,NIO,中文呢
    
     **/
        }
    
        private void pringProperties(String methodName){
            System.out.println("---------"+methodName+"()---------");
            System.out.println("limit:"+buffer.limit()+",capacity:"+buffer.capacity()+",position:"+buffer.position());
        }
    }
    

    相关文章

      网友评论

        本文标题:NIO学习笔记(1)

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