美文网首页一位攻城狮的自我修养
基于通道和缓冲区的读写操作!Java NIO的核心组件基本介绍

基于通道和缓冲区的读写操作!Java NIO的核心组件基本介绍

作者: 攻城狮Chova | 来源:发表于2022-01-03 21:13 被阅读0次
    Java NIO

    NIO基本介绍

    • Java NIO: Java New IO
      • 是一个可以替代标准Java IO API的IO API
      • Java NIO提供了与标准IO不同的工作方式

    通道和缓冲区

    • 通道和缓冲区: Channels and Buffers
      • 标准IO是基于字节流和字符流进行操作的
      • NIO是基于通道Channel和缓冲区Buffer进行操作:
        • 数据总是从通道读取到缓冲区
        • 数据总是从缓冲区写入到通道

    非阻塞IO

    • 非阻塞IO: Non-blocking IO
      • Java NIO可以非阻塞地使用IO:
        • 当线程从通道读取数据到缓冲区时,线程还可以进行其余操作;当数据被写入到缓冲区时,线程也可以进行其余操作
        • 当数据从缓冲区写入到通道时,线程也可以进行其余操作

    选择器

    • 选择器: Selectors
      • 用于监听多个通道的事件. 比如连接打开,数据到达
      • 单个线程可以监听多个数据通道

    NIO核心组件

    • Java NIO的核心组件:
      • Channels
      • Buffers
      • Selectors

    Channel和Buffer

    • 所有的IONIO中都是从一个Channel开始的
    • Channel类似数据流:
      • 数据可以从Channel读到Buffer
      • 数据也可以从Buffer读到Channel
    • Channel的主要实现: 涵盖了UDP和TCP网络IO以及文件IO
      • FileChannel
      • DatagramChannel
      • SocketChannel
      • ServerSocketChannel
    • Buffer的主要实现: 覆盖了能通过IO发送的基本数据类型-byte,short,int,long,float,double,char
      • ByteBuffer
      • CharBuffer
      • DoubleBuffer
      • FloatBuffer
      • IntBuffer
      • LongBuffer
      • ShortBuffer
      • Java NIO中还有一个MappedByteBuffer, 用于表示内存映射文件

    Selector

    • Selector允许单线程处理多个Channel:
      • 如果应用打开了多个连接通道,但是每个连接的数据流量都很低,使用Selector就会很方便
    • 示例: 在一个单线程中使用一个Selector处理3个Channel
      在这里插入图片描述
    • 要使用Selector, 得向Selector注册Channel, 然后调用Selector中的select() 方法 .
    • 这个方法会一直阻塞到某个注册的通道有事件就绪.一旦这个方法返回,线程就可以处理这些事件,比如新连接和数据接收等

    相关文章

      网友评论

        本文标题:基于通道和缓冲区的读写操作!Java NIO的核心组件基本介绍

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