java中流如何分类
Java流的分类
Java中的流(Stream)可以根据不同的标准进行分类,主要包括按数据流向、操作单元和功能特性三种方式。
按数据流向分类
输入流(InputStream/Reader)
从数据源(如文件、网络、内存等)读取数据到程序。例如:
FileInputStream:读取文件字节数据。InputStreamReader:将字节流转换为字符流。
输出流(OutputStream/Writer)
将程序中的数据写入目标(如文件、网络等)。例如:
FileOutputStream:向文件写入字节数据。OutputStreamWriter:将字符流转换为字节流输出。
按操作单元分类
字节流(Byte Stream)
以字节(8位)为单位操作数据,适用于二进制文件或非文本数据。核心类为:
InputStream/OutputStream:抽象基类。- 实现类如
FileInputStream、ByteArrayOutputStream。
字符流(Character Stream)
以字符(16位Unicode)为单位操作数据,适用于文本处理。核心类为:
Reader/Writer:抽象基类。- 实现类如
FileReader、StringWriter。
按功能特性分类
节点流(Node Stream)
直接连接数据源,进行原始读写操作。例如:
FileReader:直接关联文件读取字符。SocketInputStream:从网络套接字读取数据。
处理流(Processing Stream)
对节点流封装,提供增强功能(如缓冲、转换等)。例如:

BufferedReader:通过缓冲提升读取效率。ObjectOutputStream:实现Java对象序列化。
常见流类示例
// 字节流示例:文件复制
try (FileInputStream fis = new FileInputStream("source.txt");
FileOutputStream fos = new FileOutputStream("target.txt")) {
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) != -1) {
fos.write(buffer, 0, length);
}
}
// 字符流示例:读取文本文件
try (BufferedReader br = new BufferedReader(new FileReader("text.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
选择流的建议
- 处理文本数据优先使用字符流(避免编码问题)。
- 二进制数据(如图片)必须使用字节流。
- 频繁读写时,通过缓冲流(如
BufferedInputStream)提升性能。






