Java 的 I/O(输入/输出)系统是处理数据流的核心机制,随着 Java 1.4 的发布,NIO(New
Input/Output)作为 IO 系统的补充被引入,提供了更加高效的 I/O 操作,特别是在处理高并
发的数据传输时。本文将深入探讨 Java IO 与 NIO 的区别,并提供详细的代码示例,帮助开
发者更好地理解这两种 I/O 处理方式。
## 1. Java IO 概述
Java IO 基于字节流和字符流进行操作,提供了一套完整的类库来处理数据流。这些类库包
括`InputStream`、`OutputStream`、`Reader`和`Writer`等。
### 1.1 Java IO 的特点
- **流式操作**:基于流进行数据的读写操作。
- **阻塞式 I/O**:在数据读写过程中,线程会被阻塞,直到操作完成。
- **面向对象**:所有 I/O 操作都通过对象完成,易于理解和使用。
### 1.2 Java IO 的代码示例
以下是使用 Java IO 进行文件读写的简单示例:
```java
import java.io.*;
public class IOExample {
public static void main(String[] args) {
String content = "Hello, IO!";
String fileName = "io_example.txt";
try (FileOutputStream fos = new FileOutputStream(fileName);
BufferedOutputStream bos = new BufferedOutputStream(fos);
PrintWriter pw = new PrintWriter(bos)) {
pw.write(content);
} catch (IOException e) {
e.printStackTrace();
}
try (FileInputStream fis = new FileInputStream(fileName);
BufferedReader br = new BufferedReader(new InputStreamReader(fis))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}} catch (IOException e) {
e.printStackTrace();
}
}
}
```
## 2. Java NIO 概述
Java NIO 在 Java 1.4 中引入,提供了一种更加高效的 I/O 操作方式,特别是在处理大规模数 据传输时。NIO 基于通道(Channel)和缓冲区(Buffer)进行操作。
### 2.1 Java NIO 的特点
- **通道和缓冲区**:数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。
- **非阻塞 I/O**:支持非阻塞模式,可以进行异步 I/O 操作。
- **选择器(Selector)**:可以监视多个通道的事件(如连接打开、数据到达),并根据事 件类型进行相应的处理。