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为止。当方法返回的时候,这个线程就可以处理这些事件了。事件例子:连接,数据到达等。

  • 相关阅读:
    Windows Phone 开发 MD5计算
    php 3des加密算法以及与java,.net,c#的交互的一致性
    <加密算法c#>——— 3DES加密之ECB模式 和 CBC模式
    Blend PathListBox 使用
    计算机的几种类型单词、快捷键
    【SQL Server】 数据定义语言(定义基本表、完整性约束实现、索引)
    【SQL Server】 数据查询语句
    【WindowsPhone】 独立存储
    终结,铭记
    Day 3,4,5
  • 原文地址:https://www.cnblogs.com/hitandrew/p/3339765.html
Copyright © 2011-2022 走看看