• NIO的理解


    一、缓冲区(Buffer):在java NIO中负责数据的存取,实际上就是数组,用于存储不用数据类型的数据,根据数据类型不同(boolean除外),提供了相应类型的缓冲区(ByteBuffer,CharBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer,DoubleBuffer),管理方式几乎一致,都是使用allocate()分配。

    put()存入数据

    get()取出数据

    flip()切换成读取数据模式,position归0,limit变成最大可操作数,若之前插入了5个字节数据,则limit变成5,因为索引5后面不存在数据,无法操作,capacity保持不变。

    rewind()读数据的position归0,相当于可以再次读取

    clear()各个属性还原初始化,但实际不清空数据缓冲区中的内容,数据处于一种被遗忘的状态,因为各个属性回归最初状态,导致无法正确读取原始数据

    缓存区中的4个核心属性:

    1.capacity:容量,表示缓冲区中最大的存储容量,一旦声明不能改变

    2.limit:界限,表示缓冲区中可以操作数据的大小,limit后的数据不能进行读写

    3.position:位置,表示缓冲区中正在操作数据的位置。

    4.mark:标记,表示记录当前position的位置,可以通过reset()恢复到mark的位置

    0<=mark<=position<=limit<=capacity

    直接缓冲区与非直接缓冲区

    非直接缓冲区:使用allocate()分配缓冲区,将缓冲区建立在JVM内存中

    直接缓冲区:通过allocateDirect()方法分配缓冲区,可以直接将缓冲区建立在操作系统的物理内存中,使用直接缓冲区,有时候会产生数据已经传输完成,但是程序未执行完成,cpu占用飙升,这是因为jvm对物理内存的占用还没解除,需要gc自动进行回收后才会恢复,内存映射文件也是直接缓冲区的方式

    通道(channel):用于源节点与目标节点的连接,在java NIO中负责缓冲区的数据传输。Channel本身不包含数据,因此需要配合缓冲区进行使用

    通道的主要实现类

      java.nio.channels.Channel

        |--FileChannel

        |--SocketChannel

        |--ServerSocketChannel

        |--datagramChannel

    获取通道

      1.java针对支持通道的类提供了getChannel()方法

      本地IO:

        FileInputStream/FileOutputStream

        RandomAccessFile

      网络IO:

        Socket

        ServerSocket

    在JDK1.7中提供了针对各个通道的open()静态方法

    在JDK1.7中提供了Files工具类的newByteChannel()方法

    分散(Scatter)与聚集(Gather)

    分散读取:将通道中的数据分散到多个缓冲区中

    聚集写入:将多个缓冲区中的数据聚集到一个通道中

    使用NIO完成网络通信的三个核心,FileChannle不能使用选择器,因为不能是非阻塞的。非阻塞只针对网络通信

    1.通道(Channel):负责连接

      java.nio.channels.Channel 接口:

        |--SelectableChannel

          |--SocketChannel:

          |--ServerSocketChannel:

          |--DatagramChannel:

        

    2.缓冲区(Buffer):负责数据的存取

    3.选择器(Selector):是SelectableChannel的多路复用器,用于监控SelectableChannel的IO状况

  • 相关阅读:
    Documentum之基础(1)
    tomcat部署项目,war包问题[转]
    AD与LDAP区别
    Microsoft Visual Studio2010--此时无足够的可用内存,无法满足操作的预期要求,可能是由于虚拟地址空间碎片造成的。请稍后重试。
    Oracle 11g服务器安装详细步骤
    Oracle 11g 密码永不过期设置
    oracle 11g dbf数据文件从C盘迁移到D盘
    Swift 简介
    0Day 密码重置dede阿帕奇强制安装
    PS抠图教程_抠图小技巧_常用抠图小技巧_图片结构与配色
  • 原文地址:https://www.cnblogs.com/zst-blogs/p/10914468.html
Copyright © 2020-2023  润新知