• [翻译]java nio 概述


    原文地址:http://tutorials.jenkov.com/java-nio/overview.html

    java NIO 包含一下核心内容:

    •   Channels
    •   Buffers
    •   Selectors

    java NIO 包含了比上述跟多的类和组件,但是我认为Channel,Buffer,Selector是java NIO的核心。剩下的组件,像Pipe,FileLock,是和这三大核心组件极少一起使用的。因此在概述中我将会把精力集中在这三个组件上。其他的组件将会在这系列教程的其他地方专门讲解。

    Channels和Buffers

    总的说,所有的IO在NIO中都是从channel开始的。Channel有一点像流。数据可以从channel读到buffer中,数据也可以从buffer铣刀channel中。如下图:

        

    JAVA NIO 数据从Channel读入到Buffer,从Buffer写入到Channel

    有很多的channel和buffer的类型,下面是在java NIO中实现的一些主要的Channel:

    • FileChannel
    • DatagramChannel
    • SocketChannel
    • ServerSocketChannel

    从上可以看出,这些channel囊括了TCP+UDP 网络IO和文件IO

    和这些类相关的还有一些有趣的接口,但是出于简洁的目的,我就不在这篇概述中说明了。他们将会在其他有关的章节中说明。

    下列是在JAVA NIO中实现的Buffer类:

    • ByteBuffer
    • CharBuffer
    • DoubleBuffer
    • FloatBuffer
    • IntBuffer
    • LongBuffer
    • ShortBuffer

    这些类囊括了可以通过IO发送数据的基本数据类型:byte,short,int,long,float,double,characters。

    JAVA NIO还有一个叫MappedByteBuffer的类,这个类可以和mapped 文件一起使用。这里我也不再概述中介绍了。

    Selector

    selector一般都一个线程同时监控多个channel。如果你的程序有多个连接(channels)那么就会很方便,这样每一个连接的流量都很小。例如:聊天服务器。

    下图是一个线程使用一个selector监控三个channels:

    JAVA NIO: 一个线程使用一个selector监控三个channel

    可以通过channel注册来使用selector。然后就可以调用selector的select()函数来使用。这个函数将会阻塞到一个时间可以使用其中一channel为止。当方法返回的时候,这个线程就可以处理这些事件了。事件例子:连接,数据到达等。

  • 相关阅读:
    合并两个有序链表
    有效括号方法二
    有效括号
    es6 中的模块化
    XMLHttpRequest 对象
    AST
    php读写文件方式
    vue开发中遇到的问题
    sublime操作
    cmd命令
  • 原文地址:https://www.cnblogs.com/hitandrew/p/3339765.html
Copyright © 2020-2023  润新知