zoukankan      html  css  js  c++  java
  • [翻译]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为止。当方法返回的时候,这个线程就可以处理这些事件了。事件例子:连接,数据到达等。

  • 相关阅读:
    01-helloworld
    F2. Nearest Beautiful Number (hard version) (思维+分类讨论+枚举)
    CF1559 D2. Mocha and Diana (Hard Version)
    牛客小白月赛36——全部施工完毕
    [P4735] 最大异或和——可持久化trie + 思维
    CF1322B Present(思维 + 位运算 + 双指针 + 枚举)
    牛客每日一题SCI2005扫雷
    一些没见过的dp模型
    思维训练——CF1304E 1-Trees and Queries
    思维训练——CF1292B Aroma's Search
  • 原文地址:https://www.cnblogs.com/hitandrew/p/3339765.html
Copyright © 2011-2022 走看看