Java IO 节点流
简介
在 Java 编程语言中,I/O(Input/Output)是指与外部设备或文件进行数据交换的过程。Java 提供了丰富的 I/O 类和接口,以便开发者可以轻松地进行数据读写操作。其中,节点流是 Java I/O 中最基本的一种类型。
节点流是指直接与数据源或数据目标进行交互的流,也被称为低级流。Java 中的节点流是以字节为单位进行操作的,用于处理二进制数据。节点流通常是与某个物理设备或文件直接相连的,例如文件输入流、文件输出流、网络输入流、网络输出流等。节点流是 Java I/O 的基础,其他类型的流(如处理流)都是在节点流的基础上进行封装或扩展的。
节点流的类型
Java 中常见的节点流有以下几种:
- 文件输入流(FileInputStream):用于从文件中读取数据。
- 文件输出流(FileOutputStream):用于向文件中写入数据。
- 字节数组输入流(ByteArrayInputStream):用于从字节数组中读取数据。
- 字节数组输出流(ByteArrayOutputStream):用于向字节数组中写入数据。
- 管道输入流(PipedInputStream):用于与管道输出流进行通信。
- 管道输出流(PipedOutputStream):用于向管道输入流发送数据。
- 缓冲输入流(BufferedInputStream):用于提供缓冲功能,提高读取效率。
- 缓冲输出流(BufferedOutputStream):用于提供缓冲功能,提高写入效率。
下面将以文件输入流(FileInputStream)和文件输出流(FileOutputStream)为例,介绍节点流的使用方法和相关示例代码。
文件输入流示例
文件输入流用于从文件中读取数据,以下是文件输入流的基本使用方法:
- 创建文件输入流对象,指定要读取的文件路径。
FileInputStream fis = new FileInputStream("path/to/file");
- 创建一个字节数组,用于存储读取的数据。
byte[] buffer = new byte[1024];
- 使用文件输入流的
read()
方法读取数据,并将读取的数据存储到字节数组中。read()
方法会返回读取的字节数,如果已到达文件末尾则返回 -1。
int bytesRead = fis.read(buffer);
- 关闭文件输入流。
fis.close();
完整的文件输入流示例代码如下:
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamExample {
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream("path/to/file");
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
// 处理读取的数据
// ...
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
文件输出流示例
文件输出流用于向文件中写入数据,以下是文件输出流的基本使用方法:
- 创建文件输出流对象,指定要写入的文件路径。
FileOutputStream fos = new FileOutputStream("path/to/file");
- 创建一个字节数组,用于存储要写入的数据。
byte[] data = "Hello, World!".getBytes();
- 使用文件输出流的
write()
方法将数据写入文件。
fos.write(data);
- 关闭文件输出流。
fos.close();
完整的文件输出流示例代码如下:
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamExample {
public static void main(String[] args) {
FileOutputStream fos = null;
try {
fos = new FileOutputStream("path/to/file");
byte[] data = "Hello, World!".getBytes();
fos.write(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
``