在 Java 中,InputStream
和 OutputStream
是两个基本的 I/O 类,用于处理字节流的输入和输出。它们分别是输入和输出操作的基类,并且都有多个子类,支持从各种数据源读取数据和将数据写入各种数据目标。以下是它们的关系、基类、子类及其常见用途的详细介绍。
InputStream
和 OutputStream
的关系
InputStream
:是一个抽象类,表示字节输入流的所有类的超类。它定义了从不同输入源(如文件、内存缓冲区、网络连接)读取字节数据的基本方法。OutputStream
:是一个抽象类,表示字节输出流的所有类的超类。它定义了向不同输出目标(如文件、内存缓冲区、网络连接)写入字节数据的基本方法。
InputStream
和 OutputStream
并没有直接的继承关系,但它们是互补的,分别处理输入和输出操作。
InputStream
的基类和子类
基类:
java.io.InputStream
:抽象类,定义了基本的读取方法。
常见子类:
FileInputStream
:从文件中读取数据。ByteArrayInputStream
:从字节数组中读取数据。BufferedInputStream
:为另一个输入流提供缓冲功能,提高读取效率。DataInputStream
:用于读取 Java 原始数据类型(如 int、double)的输入流。ObjectInputStream
:用于反序列化对象的输入流。PipedInputStream
:管道输入流,用于线程之间的通信。FilterInputStream
:是其他输入流的抽象装饰器类,为输入流提供附加功能的基类。
OutputStream
的基类和子类
基类:
java.io.OutputStream
:抽象类,定义了基本的写入方法。
常见子类:
FileOutputStream
:向文件中写入数据。ByteArrayOutputStream
:将数据写入字节数组。BufferedOutputStream
:为另一个输出流提供缓冲功能,提高写入效率。DataOutputStream
:用于写入 Java 原始数据类型(如 int、double)的输出流。ObjectOutputStream
:用于序列化对象的输出流。PipedOutputStream
:管道输出流,用于线程之间的通信。FilterOutputStream
:是其他输出流的抽象装饰器类,为输出流提供附加功能的基类。
示例代码
使用 InputStream
读取文件
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class InputStreamExample {
public static void main(String[] args) {
try (InputStream inputStream = new FileInputStream("example.txt")) {
int data;
while ((data = inputStream.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用 OutputStream
写入文件
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class OutputStreamExample {
public static void main(String[] args) {
String data = "Hello, World!";
try (OutputStream outputStream = new FileOutputStream("example.txt")) {
outputStream.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
继承层次结构
InputStream
的继承层次结构
java.lang.Object
└─ java.io.InputStream
├─ java.io.ByteArrayInputStream
├─ java.io.FileInputStream
├─ java.io.FilterInputStream
│ ├─ java.io.BufferedInputStream
│ ├─ java.io.DataInputStream
│ ├─ java.io.PushbackInputStream
├─ java.io.ObjectInputStream
├─ java.io.PipedInputStream
├─ java.io.SequenceInputStream
└─ java.net.SocketInputStream
OutputStream
的继承层次结构
java.lang.Object
└─ java.io.OutputStream
├─ java.io.ByteArrayOutputStream
├─ java.io.FileOutputStream
├─ java.io.FilterOutputStream
│ ├─ java.io.BufferedOutputStream
│ ├─ java.io.DataOutputStream
│ ├─ java.io.PrintStream
├─ java.io.ObjectOutputStream
├─ java.io.PipedOutputStream
└─ java.net.SocketOutputStream
总结
InputStream
和OutputStream
是 Java I/O 系统的核心,用于处理字节流的输入和输出。- 它们有多个子类,支持从各种数据源读取和向各种数据目标写入。
- 通过组合使用
InputStream
和OutputStream
的子类,可以实现高效的数据传输和处理。