`
javazqd110
  • 浏览: 8535 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

nio系列介绍1

    博客分类:
  • java
阅读更多

前言:

  Jdk自1.4版本开始,提供给我们一种新的IO操作,即NIO(new io),这种新的io不同与之前的io操作(java.io包

  下),感觉是个废话。我们称java.io包下的io为BIO(blocking io)。Jdk1.7版本开始,又给我们提供了第三招IO操

  作,即AIO(asynchronous io),之所以有不同这么io,原因取决于底层(操作系统)的区别,具体的区别参阅”

  统的几种IO模型”。这篇文章介绍我对nio的掌握理解。

Nio包总体结构了解:

     Java.nio包

       
        

  Java.nio.channel包

        
      
 

    我们知道java程序跑在jvm上,sun公司向下屏蔽了底层的具体操作,向上为我们提供了抽象的形象的api

     方便我们使用,nio抽象的还原了底层进行io操作的情况,又使我们开发人员便于理解学习。

理解nio:

         我们知道,跑在操作系统上的程序,当程序发生与硬件相关的操作时,并非我们的程序直接与硬件交

   互,都是程序调用操作系统函数,操作系统再去与具体的硬件交互的。这也是IO的操作基本流程。Java

   程序也不例外,现在就来看看javanio是如何进行操作的:

      Nio是基于通道+缓冲器来抽象应用程序io操作的

     通道(Channel):很好理解。道路,走廊等等,都可认为是通道,即起始点间打通,能够传输的。

                                        计算机中可认为是程序(内存)到操作系统,再到外部介质(磁盘,网络等)的能够

                                        输数据的通道,理解起来是不是不难,光有通道也不行,得有东西在上面传递。

              缓冲器(Buffer):这就是数据的存储器,我们知道真正的IO操作不是程序本身去做,而是由操作

 

                                        系统去实现,程序只是把数据准备好,然后向操作发送读或写信号,系统就将

                                        程序准备的数据进行读写,而程序准备的数据就放在缓冲器中。

      Nio主要就是这两个核心概念。下面再具体看看nioapi。.

API介绍:

       通过上面的关系图,可以看出来,根据终点的不同,可以分成大致如下几种通道:

      DatagramChannel:数据报套接字通道(UDP网络)

   ServerSocketChannel:侦听套接字通道

   SocketChannel:连接套接字通道

   Pipe.SinkChannel:管道传送的通道(可写入)

   Pipe.SourceChannel:管道传送的通道(可读取)

      FileChannel:文件通道

  方法介绍:读写方法每个通道都有,同时需要将缓冲器最为参数放进去(注意,仅仅是一个系统调用

      具体由系统去做;其次不同于bio的是,通道是双向的,可读可写)方法请参看这里

  接下来,看看缓冲器,通过上图看出可分为:

   ByteBuffer:字节缓存器

   CharBuffer :字符缓冲

   DoubleBuffer double 缓冲区器

   FloatBuffer float 缓冲区

   IntBuffer int缓冲器

   LongBuffer long缓冲器

   MappedByteBuffer :直接字节缓冲区(内容是文件的内存映射区域)

      ShortBuffershort缓冲器

      ByteOrder:字节序的类型安全枚举(即大小端)

  通过上面介绍基本对nio有了较全面的了解了,先脉络后细节,我们先要有个宏观上的把握,这样学习

  具体的才能便于理解和记忆。这里还有个小的知识点(也就是java.nio.charset )没介绍,接下来就看

     java.nio.charset包。

java.nio.charset包:

 根据包名也就知道是干什么的了,字符集的问题。这个其实可以类比bio,在bio中,当在非字节流的操作

 情况下,我们都需要指定一个字符集来读,写流,这样才能保证不会出现乱码的现象。java.nio.charset

 包也就是nio中进行读,写到通道时指定的字符集。

 主要有3个类:

    Charset :提供解码,编码;Unicode 代码单元序列和字节序列之间的指定映射关系的类。

 CharsetDecoder :解码器,用于将字节序列转换成 16 位 Unicode 字符序列。

    CharsetEncoder :编码器,用于将Unicode 字符序列转成 charset 中字节序列。

   在nio中放进通道的缓冲器只能为ByteBuffer(字节缓冲器),所以程序中使用了字符等其他的缓冲器时,

   当进行读写,要先转成字节缓冲器。

 

 下一篇文章会根据一个简单代码了解如何使用nio的相关api。

 

 

  

 

1
0
分享到:
评论

相关推荐

    NIO系列DATASHEET.pdf

    **NIO系列DATASHEET.pdf**提供了NIO系列产品的详细介绍和技术规格,该文档覆盖了多个型号的产品,包括不同类型的输入输出模块、电源设备以及网络连接设备等。下面将详细解析文档中的各个模块及其特点。 #### 二、...

    正泰NIO1系列变频器.rar

    "滑模变结构控制理论进展综述.pdf" 这个文件很可能详细介绍了滑模控制理论的最新研究进展、应用实例以及与正泰NIO1系列变频器相关的控制技术。通过阅读这份综述,我们可以深入理解滑模控制在实际工程中的应用,包括...

    Java NIO系列教程(一) Java NIO 概述

    ### Java NIO 系列教程(一):Java NIO 概述 #### 一、引言 Java NIO(New IO)是Java SE 1.4版本引入的一个新的I/O处理框架,它提供了比传统Java IO包更高效的数据处理方式。NIO的核心在于其三大组件:Channels...

    Java nio详细介绍 详细介绍java nio

    - **NIO (New IO)**:随着JDK 1.4的发布,Java引入了一种全新的IO处理方式——NIO,它提供了一系列新特性和改进,以提高IO效率。 NIO的关键特性包括但不限于: - **缓存(Buffer)支持**:为所有的原始类型提供缓存...

    Java-NIO-系列教程

    通过以上介绍,我们可以了解到 Java NIO 提供了一系列强大而灵活的 API 来处理 I/O 操作,相比于传统的 Java IO,它在性能和灵活性方面都有显著提升。后续章节将深入探讨这些核心组件的具体使用方法和高级特性。

    java nio

    1. **通道(Channels)**:通道是数据传输的途径,类似于BIO中的流。Java NIO提供了多种通道,如文件通道(FileChannel)、套接字通道(SocketChannel)和服务器套接字通道(ServerSocketChannel)等。通道可以进行...

    基于事件的_NIO_多线程服务器

    本文将详细介绍一种基于事件驱动的NIO多线程服务器的设计思路与实现原理。 #### NIO多线程服务器的关键概念 ##### 1. NIO与多线程结合的意义 - **提高资源利用率**:多线程能够充分利用多核CPU的计算能力,尤其是...

    NIO学习与总结

    通过以上介绍,我们可以看到NIO相比于传统的I/O技术,在数据处理效率上有显著的提升。通过使用缓冲区和通道的概念,NIO能够更加高效地处理数据,特别适合于需要大量数据处理的应用场景。此外,NIO还提供了一系列高级...

    Pro Java 7 NIO.2.pdf

    根据提供的文件信息,“Pro Java 7 NIO.2.pdf”由Anghel Leonard于2011年编写,主要介绍了Java 7中的新输入/输出(NIO)API,特别是NIO.2(JSR 203)所带来的增强功能。这本书通过一系列章节详细讲解了如何使用NIO.2...

    优雅的操作文件:java.nio.file 库介绍.pdf

    ### 1. Path路径 `java.nio.file.Paths`模块提供静态方法创建`Path`对象,代表文件系统中的路径。`Path`类则包含一系列方法,用于处理和操作路径。例如: ```java import java.nio.file.Path; import java.nio....

    Java Nio ibm技术文档

    本文档通过对NIO库的详细介绍,旨在帮助Java开发者更好地理解和掌握NIO的核心概念和技术细节。通过学习缓冲区、通道和选择器等关键组件的使用方法,开发者可以编写出更加高效、可靠的Java应用程序。同时,NIO库还...

    Java_NIO_API详解

    本文将详细介绍NIO的主要组成部分及其实现原理,帮助开发者更好地理解和应用NIO技术。 #### 二、NIO API概述 NIO API主要集中在`java.nio`及其子包中: 1. **`java.nio`**: 定义了各种类型的缓冲区(Buffer),包括...

    java nio 详解

    - **基本类型**:NIO提供了一系列缓冲区类,如`ByteBuffer`、`CharBuffer`、`IntBuffer`等,它们分别用于存储不同类型的数据。 - **状态管理**:缓冲区有四个关键状态:容量(Capacity)、限制(Limit)、位置...

Global site tag (gtag.js) - Google Analytics