`
javazqd110
  • 浏览: 8362 次
  • 性别: 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
分享到:
评论

相关推荐

    正泰NIO1系列变频器.rar

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

    java nio

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

    NIO框架netty

    1. **异步非阻塞I/O**:Netty采用基于Reactor模式的事件驱动架构,利用Java NIO的非阻塞I/O模型,提高了系统的并发能力,降低了CPU的等待时间。 2. **高性能**:Netty通过优化内存分配、零拷贝技术、高效的缓冲区...

    tqk-learn-nio:netty学习

    1. **源代码示例**:展示如何使用 Netty 构建服务器和客户端,以及如何处理各种网络协议。 2. **文档**:教程、笔记或者指导,解释了 NIO 和 Netty 的基本概念,以及如何将它们应用于实际项目。 3. **测试**:单元...

    mina框架介绍以及JAR包

    1. **MINA框架** MINA框架的设计目标是简化网络编程,使开发者能够专注于业务逻辑,而不是底层的网络通信细节。它提供了一套事件驱动和异步处理的API,可以处理各种复杂的网络协议。MINA包含了许多关键组件,如...

    挑战java程序员系列教程

    1. Java基础:教程首先会介绍Java的基础知识,包括语法、变量、数据类型、运算符、控制结构(如if语句、for循环、while循环)以及方法的定义和调用。这些是编写任何Java程序的基础,理解和掌握它们至关重要。 2. 类...

    面向企业需求探讨Java系列课程体系的设置.zip

    本文将深入探讨面向企业需求的Java系列课程体系的设置,旨在为学习者提供一条清晰的学习路径,以满足企业实际工作中的需求。 一、Java基础 Java基础是所有Java学习的起点,包括语法特性、数据类型、流程控制语句、...

    code4netty:BIO、PIO(Pseudo-Asynchronous)、NIO示例,以及基于Netty的实现各种功能的测试demo。基于Netty4.1.22

    本文将深入探讨Java中的三种I/O模型:BIO( Blocking I/O)、PIO(Pseudo-Asynchronous I/O)和NIO(Non-blocking I/O),并结合Netty 4.1.22框架介绍其在实际应用中的实现。`code4netty`项目提供了一系列的示例代码...

    Netty的重要组件介绍与传输1

    1. **Channel**:Channel 是 Netty 对网络连接的抽象,类似于 Socket,代表一个到另一端点的连接。Netty 提供了多种 Channel 实现,如 NioSocketChannel(TCP 连接)、NioDatagramChannel(UDP 连接)等,以支持不同...

    netty权威指南(第二版)

    1. **非阻塞I/O (NIO)** - 阻塞I/O与非阻塞I/O的区别:传统的Java I/O基于流模型,当进行读写操作时,如果数据未准备好,线程会被阻塞。而NIO通过选择器(Selector)和通道(Channel)实现非阻塞,允许单线程管理多...

    Java学习指南第四版下册

    《Java学习指南(第4版)(上、下册)》加入了从Java 6和Java 7发布以后的变化,包括新的语言功能、并发工具(Fork-Join框架)、新的NIO Files API、Java Servlet(3.0)等新主题,作者通过精心挑选的、富有实用性和趣味性...

    netty的视频90集

    这个“netty的视频90集”系列可能是对Netty框架的全面讲解,适合Java开发者,尤其是对网络编程感兴趣的初学者和进阶者。下面将详细介绍Netty及其相关知识点。 1. **Netty基础**: - Netty的基本概念:了解Netty是...

    01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip

    【描述】中提到的"( 01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip )" 暗示这门课程可能包含一系列视频教程,首个文件"01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.avi"很可能是课程的开篇...

    Java最全的架构笔记(共六百多页).zip

    1. **并发系列**:讲解了Java并发编程的基础与高级概念,如线程池、并发容器(如ConcurrentHashMap)、锁机制(如synchronized和Lock)、并发工具类(如CountDownLatch和CyclicBarrier)以及并发设计模式。...

    solr部署技术文档。

    本技术文档将详细介绍Solr的索引和搜索过程,以及如何在Tomcat环境下搭建和配置Solr。 **一、Solr索引与搜索过程** 1. **索引过程** - **文件处理**:索引开始于一系列待处理的文件,这些文件可能包含各种类型的...

    达内it培训 java培训电子书 内部资料 系列20 JAVA经典项目集锦 pdf

    《20_JAVA经典项目集锦》是达内IT培训中心内部的一份珍贵资料,专为Java学习者提供了一系列深入且实用的项目实践案例。这份PDF文档旨在帮助学员提升Java编程技能,通过实际项目的演练,将理论知识与实战经验相结合,...

    netty-api-4.1 中文版

    总的来说,“netty-api-4.1 中文版”文档是学习和掌握 Netty 的重要参考资料,它详细介绍了各个类和接口的功能,以及如何使用它们来构建高效、可靠的网络应用。通过阅读和实践,开发者可以深入理解 Netty 的设计理念...

    特征:1、跨平台(Linux, Windows, MacOS, Solaris)2、高性能事件循环.rar

        在类unix系统中有五大I/O模型,依次为阻塞IO(BIO)、非阻塞IO(NIO)、IO多路复用(linux下有select、poll、epoll三种方案)、信号驱动IO、异步IO(前面四种都是同步IO),本文主要介绍常用的C的IO库,几乎都是...

    Netty权威指南 第2版 完整版

    1. **Java NIO基础**:Netty是基于Java NIO(非阻塞I/O)构建的,NIO提供了一种不同于传统阻塞I/O的I/O模型。它支持多路复用,允许一个线程同时处理多个连接,提高了系统的并发性。 2. **ByteBuf**:Netty中的 ...

    Netty-讲义.zip

    这个“Netty 讲义.zip”压缩包包含了一系列关于 Netty 的学习资料,主要分为四个部分:入门、进阶、NIO 和优化与源码分析。 首先,我们来探讨 Netty 的入门知识。`Netty02-入门.md` 可能会涵盖以下内容:Netty 的...

Global site tag (gtag.js) - Google Analytics