Java NIO系列教程(1): Java NIO 概述
英文:Jakob Jenkov
译文:airu
链接:http://ifeve.com/overview/
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
Channel <-----Buffer
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()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等。
相关推荐
1. **Java NIO概述** Java NIO的核心组件包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。通道是数据传输的路径,可以从通道读取数据到缓冲区,或者从缓冲区写入通道。缓冲区是存储数据的容器,它提供...
Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather 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 概述 Java NIO (New IO) 是从 Java 1.4 开始提供的一种新的 I/O 处理方式,旨在改进传统 Java IO API 的性能并引入更高效的数据处理机制。Java NIO 主要包括三大...
### Java NIO 系列教程知识点详解 #### 一、Java NIO 概述 Java NIO (New IO) 是 Java SE 1.4 版本引入的一种新的输入/输出方式,它提供了一种替代传统的 Java IO 包的方式。Java NIO 主要包括三个核心组成部分:*...
### Java NIO框架Netty教程知识点解析 #### 一、Netty框架简介 Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器与客户端。它提供了对多种协议的支持,如HTTP、WebSocket、...
Java NIO(New IO)框架是Java平台中用于处理I/O操作的一种非阻塞I/O模型,相较于...通过阅读"Java NIO框架Netty教程.pdf",你可以深入理解Netty的工作原理,并学会如何在实际项目中应用Netty,提升你的网络编程能力。
本文档旨在为Java程序员提供一个全面深入理解NIO库的教程,不仅涵盖了概念性的高级知识,还包括了底层编程细节。 #### 二、NIO概述 ##### 2.1 历史背景 - **原生I/O**:Java最初提供的I/O操作是基于流的,这在处理...
【Java程序员系列教程】 在Java编程领域,"挑战java程序员系列教程"是一个旨在提升和测试开发者技能的资源。本教程涵盖了Java语言的核心概念以及实际应用,帮助初学者和有经验的程序员深入理解Java编程的各个方面。...
在“基于Java NIO的网络服务器Netty生产实例.zip”压缩包中,可能包含了关于如何使用Netty构建实际生产环境中的网络服务器的相关教程或代码示例。 1. **Java NIO基础**:NIO的核心组件包括Channel(通道)、Buffer...
- **基本类型**:NIO提供了一系列缓冲区类,如`ByteBuffer`、`CharBuffer`、`IntBuffer`等,它们分别用于存储不同类型的数据。 - **状态管理**:缓冲区有四个关键状态:容量(Capacity)、限制(Limit)、位置...
文件名称列表中,我们看到有多个以"Master Merlin's new I-O classes - JavaWorld-"开头的文章,这可能是一个系列教程,由Master Merlin这位专家在JavaWorld网站上发表,探讨了Java NIO的新特性。此外,还有"DANCE ...
在IO流方面,教程会讲解字节流、字符流、缓冲流和转换流的使用,以及NIO(New IO)框架,这在处理大量数据传输和文件操作时非常关键。此外,教程也会涉及数据库编程,如JDBC(Java Database Connectivity)的使用,...
JAVA 7通过引入一系列新的API,极大地增强了原有的NIO框架,使其能够支持更加高效的异步I/O操作。其中,最为关键的是增加了四种异步通道: 1. **`AsynchronousSocketChannel`**:用于处理基于TCP协议的异步连接。 2...
Java实训教程是针对Java编程语言的一系列实践学习资料,旨在帮助初学者或有一定基础的开发者提升编程技能,加深对Java的理解。在这个实训教程中,你将有机会接触到一系列关键的Java编程概念和技术,涵盖从基础语法到...
1. **Java基础**:包括Java语言的基础语法,如数据类型、变量、运算符、控制结构(if语句、for循环、while循环)、数组等。这部分内容是所有Java程序员必须掌握的,是学习后续高级特性的基础。 2. **面向对象编程**...
- Java Socket提供了一系列的套接字选项,如`SO_LINGER`、`TCP_NODELAY`等,可以用来调整Socket的行为。例如,`TCP_NODELAY`选项可以禁用Nagle算法,减少小数据包的延迟。 8. **套接字连接池** - 对于频繁的短...