zoukankan      html  css  js  c++  java
  • Java NIO Overview

    Java NIO Overview

     

    Jakob Jenkov
    Last update: 2014-06-23

    Java NIO consist of the following core components:

    • Channels
    • Buffers
    • Selectors

    Java NIO has more classes and components than these, but the ChannelBuffer and Selector forms the core of the API, in my opinion. The rest of the components, like Pipe and FileLock are merely utility classes to be used in conjunction with the three core components. Therefore, I'll focus on these three components in this NIO overview. The other components are explained in their own texts elsewhere in this tutorial. See the menu at the top corner of this page.

    ChannelBuffer and Selector  是三个主要的东西,Pipe and FileLock 是要和这三个一起使用的

    Channels and Buffers

    如图所示,Channel有点像流,从buffer里读写数据

    Typically, all IO in NIO starts with a Channel. A Channel is a bit like a stream. From the Channel data can be read into a Buffer. Data can also be written from a Buffer into a Channel. Here is an illustration of that:

    Java NIO: Channels and Buffers
    Java NIO: Channels read data into Buffers, and Buffers write data into Channels

    There are several Channel and Buffer types. Here is a list of the primary Channel implementations in Java NIO:

    Channel有如下几中类型,覆盖了 TCP,UDP,文件io

    • FileChannel
    • DatagramChannel
    • SocketChannel
    • ServerSocketChannel

    As you can see, these channels cover UDP + TCP network IO, and file IO.

    There are a few interesting interfaces accompanying these classes too, but I'll keep them out of this Java NIO overview for simplicity's sake. They'll be explained where relevant, in other texts of this Java NIO tutorial.

    Here is a list of the core Buffer implementations in Java NIO:

    一些buffer类型

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

    These Buffer's cover the basic data types that you can send via IO: byte, short, int, long, float, double and characters.

    Java NIO also has a MappedByteBuffer which is used in conjunction with memory mapped files. I'll leave this Buffer out of this overview though.

    Selectors

    一个selector可以管理多个Channel,这个非常适合,你的connection很多,但是么个连接的流量又很低的情况。如聊天

    Selector allows a single thread to handle multiple Channel's. This is handy if your application has many connections (Channels) open, but only has low traffic on each connection. For instance, in a chat server.

    Here is an illustration of a thread using a Selector to handle 3 Channel's:

    Java NIO: Selectors
    Java NIO: A Thread uses a Selector to handle 3 Channel's

    To use a Selector you register the Channel's with it. Then you call it's select() method. This method will block until there is an event ready for one of the registered channels. Once the method returns, the thread can then process these events. Examples of events are incoming connection, data received etc.

    要用selector你需要往它里面注册Channel,通过select()方法,这个方法会一直阻塞到待注册通道准备好,方法返回,这个线程就可以做其他的事情了。

  • 相关阅读:
    内存对齐规则
    ATL窗口
    ATL的GUI程序设计(4)
    ATL的GUI程序设计(4)
    ATL的GUI程序设计(3)
    ATL的GUI程序设计(3)
    VMware Workstation 9.0 安装苹果Mac OS X10.9系统
    高级UIKit-03(NSFileManager、NSFileHandle)
    高级UIKit-02(文件操作)
    高级UIKit-01(总结基础UIKit)
  • 原文地址:https://www.cnblogs.com/dzhou/p/9560194.html
Copyright © 2011-2022 走看看