netty学习(5)--NIO基础知识

来源:互联网 发布:淘宝上的好评怎样删除 编辑:程序博客网 时间:2024/06/05 14:23

   NIO是new io的简称,但是nio类库的目标就是让Java支持非阻塞I/O,所以NIO也被解释为非阻塞IO(Non-block I/O)。

与Socket和ServerSocket类相对应,NIO也提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现,

这两种新增的通道支持阻塞和非阻塞两种形式。阻塞模式使用简单,但是性能和可靠性不好,非阻塞模式和阻塞模式正

好相反,使用复杂,三十性能和可靠性比较完善。开发人员根据需求自行选择!!

    一般情况下:

       低负载、低并发的应用可以选择同步阻塞IO,降低编程复杂度

        高负载,高并发的应用需要选择NIO来提高性能和可靠性。

        NIO弥补了原来同步阻塞IO的不足,在JAVA中提供了高速的,面向块的IO,以块的形式处理数据,提高传输效率

NIO的相关概念:

     缓冲区Buffer

           在NIO中,所有的数据搜时用缓冲区处理的,在读取数据时,它是直接读取到缓冲区中的,在写入数据时,写入到

缓冲区,任何时候访问NIO中的数据,都是通过缓冲区提供对数据的结构化访问以及读写位置(limit)等信息

           NIO中的缓冲区有:

            ByteBuffer : 字节缓冲区

            CharBuffer:字符缓冲区

            ShortBuffer : 短整形缓冲区

            IntBuffer:整形缓冲区

            LongBuffer : 长整形缓冲区

            FloatBuffer:浮点型缓冲区

            DoubleBuffer:双精度浮点型缓冲区


      通道Channel

         Channel是一个通道,可以通过它读取和写入数据,它就像自来水管一样。网络通过Channel读取和写入,通道是

双向的,流只是一个方向上的,而且通道可以用于读、写或者同时用于读写。

       Channel分为两大类:分别是用于网络读写的SelectableChannel和用于文件操作的FileChannel。

        ServerSocketChannel和SocketChannel都是SelectableCHannel的子类!!


       多路复用器Selector

             多路复用器Selector是java nio的编程基础,多路复用器提供选择已经就绪的任务的能力。通俗来说就是:Selector

会不断的轮询注册在其上的Channel,如果某个Channel上面有新的TCP连接接入、读写事件,这个Channel就处于就绪状态

,会被Selector轮询出来,然后通过SelectionKey可以获取就绪的Channel的集合,进行后续操作!!!

            注:一个多路复用器Selector可以同时轮询多个Channel

0 0