流的分类
流的分类
在Java中,流(Stream)被用于表示数据的输入和输出。Java的流分为几个不同的类别,每种类别都有其特定的用途和特点。以下是Java流的主要分类:
1. 字节流(Byte Streams)
- 处理原始字节数据。
- 代表类:
InputStream和OutputStream。
2. 字符流(Character Streams)
- 处理字符数据,自动处理字符编码的转换。
- 代表类:
Reader和Writer。
3. 输入流(Input Streams)
- 用于从数据源读取数据。
- 字节输入流:
FileInputStream,ByteArrayInputStream,StringBufferInputStream。 - 字符输入流:
FileReader,CharArrayReader,StringReader。
4. 输出流(Output Streams)
- 用于向数据目标写入数据。
- 字节输出流:
FileOutputStream,ByteArrayOutputStream,PrintStream。 - 字符输出流:
FileWriter,CharArrayWriter,StringWriter。
5. 节点流(Low-Level Streams)
- 直接连接到数据源或数据目的地的基本流。
- 例如:
FileInputStream,FileOutputStream,FileReader,FileWriter。
6. 处理流(High-Level Streams)
- 在节点流的基础上提供额外的功能,如缓冲、过滤、数据转换等。
- 字节处理流:
BufferedInputStream,BufferedOutputStream,DataInputStream,FilterInputStream。 - 字符处理流:
BufferedReader,BufferedWriter,LineNumberReader,FilterReader。
7. 管道流(Pipe Streams)
- 用于线程之间的通信。
- 代表类:
PipedInputStream和PipedOutputStream。
8. 数据流(Data Streams)
- 用于读写原始数据类型,自动转换为字节。
- 代表类:
DataInputStream(从字节流中读取基本数据类型)和DataOutputStream(向字节流中写入基本数据类型)。
9. 对象流(Object Streams)
- 用于对象的序列化和反序列化。
- 代表类:
ObjectInputStream和ObjectOutputStream。
10. 文件通道(File Channels)
- Java NIO 中的文件通道,提供对文件的高效访问。
- 代表类:
FileChannel。
11. 内存映射文件(Memory-Mapped Files)
- 一种内存访问方式,允许将文件区域映射到内存中。
- 通过
FileChannel实现。
12. 散射/聚集通道(Scattering/Gathering Channels)
- 散射通道允许从多个缓冲区读取数据并写入单一的目标通道。
- 聚集通道允许从单一的源通道读取数据并写入多个目标缓冲区。
示例用法
以下是使用字节输入流和字节输出流的示例:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class StreamCopyExample {
public static void main(String[] args) {
String fromFile = "source.txt";
String toFile = "destination.txt";
try (FileInputStream in = new FileInputStream(fromFile);
FileOutputStream out = new FileOutputStream(toFile)) {
int byteRead;
while ((byteRead = in.read()) != -1) {
out.write(byteRead);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
示例中,我们从一个文件读取数据并写入到另一个文件,展示了字节流的基本用法。

浙公网安备 33010602011771号