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

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

    博客分类:
  • NIO
 
阅读更多

Java NIO 由以下几个核心部分组成:

  • Channels
  • Buffers
  • Selectors

虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。

 

Channel 和 Buffer

基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。 数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。这里有个图示:

Channel和Buffer有好几种类型。下面是JAVA NIO中的一些主要Channel的实现:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

正如你所看到的,这些通道涵盖了UDP 和 TCP 网络IO,以及文件IO。

与这些类一起的有一些有趣的接口,但为简单起见,我尽量在概述中不提到它们。本教程其它章节与它们相关的地方我会进行解释。

以下是Java NIO里关键的Buffer实现:

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

这些Buffer覆盖了你能通过IO发送的基本数据类型:byte, short, int, long, float, double 和 char。

Java NIO 还有个 MappedByteBuffer,用于表示内存映射文件, 我也不打算在概述中说明。

Selector

Selector允许单线程处理多个 Channel。如果你的应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便。例如,在一个聊天服务器中。

这是在一个单线程中使用一个Selector处理3个Channel的图示:

要使用Selector,得向Selector注册Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等。

http://ifeve.com/overview/

分享到:
评论

相关推荐

    JavaNIO chm帮助文档

    Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...

    Java NIO系列教程

    ### Java NIO 系列教程知识点详解 #### Java NIO 概述 Java NIO (New IO) 是从 Java 1.4 开始提供的一种新的 I/O 处理方式,旨在改进传统 Java IO API 的性能并引入更高效的数据处理机制。Java NIO 主要包括三大...

    Java NIO 系列教程1

    1. **Java NIO概述** Java NIO的核心组件包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。通道是数据传输的路径,可以从通道读取数据到缓冲区,或者从缓冲区写入通道。缓冲区是存储数据的容器,它提供...

    Java-NIO-系列教程

    ### Java NIO 系列教程知识点详解 #### 一、Java NIO 概述 Java NIO (New IO) 是 Java SE 1.4 版本引入的一种新的输入/输出方式,它提供了一种替代传统的 Java IO 包的方式。Java NIO 主要包括三个核心组成部分:*...

    Java Nio ibm技术文档

    #### 二、NIO概述 ##### 2.1 历史背景 - **原生I/O**:Java最初提供的I/O操作是基于流的,这在处理大量数据时效率较低。 - **NIO的诞生**:为了解决这一问题,NIO应运而生。它通过定义用于存储数据的类以及以块的...

    JAVA异步通信教程

    #### 一、JAVA NIO2 异步通道概述 随着JAVA 7的发布,异步通信成为了开发高性能服务器程序的重要工具之一。为了更好地理解和使用JAVA 7提供的NIO2(New Input/Output)异步通道功能,本教程将详细介绍其核心概念、...

    java教程 htm格式

    本Java教程包含了一系列的HTML文档,它们可能按照章节划分,涵盖了从基础到高级的Java知识体系。以下是一些可能涵盖的关键知识点: 1. **Java简介**:介绍Java的历史、特点和应用领域,解释为什么Java如此流行,并...

    java jsp IO包 教程 新手入门

    本文旨在为新手提供一个全面的Java I/O教程,帮助读者理解Java I/O的基本概念、架构以及如何使用这些API。 #### 二、Java I/O概述 Java中的I/O系统设计得非常灵活且强大,它将所有类型的输入/输出抽象成“流”的...

    Scalable IO in Java

    总之,《Scalable IO in Java》不仅是一篇关于Java NIO的经典教程,更是一份关于如何设计和实现高性能、可扩展网络服务的宝贵指南。通过深入了解并实践文章中的概念和技术,开发者可以更好地应对现代互联网应用所...

    java深度历险1

    《Java深度历险》是一本深入探讨Java技术的权威教程,尤其关注JDK(Java Development Kit)的内部工作机制。本书的目的是带领读者深入了解Java平台的核心技术,帮助开发者从底层理解Java程序的运行机制,从而更好地...

    高琪Java300讲

    根据提供的文件信息,“高琪Java300讲”是一系列针对Java编程语言的学习教程,旨在帮助初学者到高级用户全面掌握Java技术栈。虽然没有具体的课程大纲或详细内容可供参考,但我们可以根据“Java300讲”的名称、描述...

    Java网络编程学习资料

    这份"Java网络编程学习资料"包含了一系列的教程,旨在帮助开发者深入理解并掌握Java在网络编程中的应用。 首先,"Socket套接字—Java套接字编程(上1).chm"文件很可能是关于Java中的Socket编程的入门教程。Socket是...

    java就业培训教程(个人整理)

    ### Java就业培训教程知识点概述 #### 第1章:Java开发前奏 - **1.1 Java虚拟机及Java的跨平台原理**: - **Java虚拟机(JVM)**:是执行Java字节码的虚拟环境,它使得Java程序可以在任何安装了JVM的平台上运行而...

    JAVA JDK6 学习笔记

    Java JDK6(Java Development Kit 6)是Oracle公司发布的一个用于开发Java应用程序的重要工具集,包含了JRE(Java Runtime Environment)和一系列的开发和调试工具。这个版本的JDK发布于2006年,引入了许多新特性和...

    Netty4.0学习笔记系列之三:构建简单的http服务

    Netty4.0学习笔记系列之三是关于构建简单的HTTP服务的教程,这主要涉及网络编程、服务器开发以及Java NIO(非阻塞I/O)的相关知识。Netty是一个高性能、异步事件驱动的网络应用程序框架,它使得开发可伸缩且稳定的...

Global site tag (gtag.js) - Google Analytics