Java InputStreamReader 详解:字节流转字符流、编码处理与实战示例
Java InputStreamReader 详解
InputStreamReader 位于 java.io,将原始字节转为字符,是读取文本文件、网络流或任何字节源表示字符的关键桥梁。
继承抽象 Reader,连接字节流(如 FileInputStream)与字符流。
当字符需多字节表示(如 UTF-8、UTF-16 编码文本),InputStreamReader 将这些字节组合读取并产生正确字符。
创建 InputStreamReader
导入必要类:
import java.io.InputStreamReader;
典型实例化用 FileInputStream 作为底层字节源:
FileInputStream file = new FileInputStream("example.txt");
InputStreamReader reader = new InputStreamReader(file);
若知文件编码,指定以避免误读:
InputStreamReader reader = new InputStreamReader(file, Charset.forName("UTF-8"));
用 Charset 保证按预期字符集解读字节。
InputStreamReader 核心方法
read()
int read()– 读单字符int read(char[] cbuf)– 填充字符数组int read(char[] cbuf, int off, int len)– 从off读最多len字符到cbuf
示例:读文本文件到字符数组。
import java.io.*;
class Main {
public static void main(String[] args) {
char[] buffer = new char[100];
try (FileInputStream file = new FileInputStream("input.txt");
InputStreamReader reader = new InputStreamReader(file)) {
reader.read(buffer);
System.out.println("Data in the stream:\n" + new String(buffer));
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出
Data in the stream: This is a line of text inside the file.
getEncoding()
获取读取器使用的编码:
InputStreamReader defaultReader = new InputStreamReader(file);
InputStreamReader utf8Reader = new InputStreamReader(file, Charset.forName("UTF-8"));
System.out.println("Default encoding: " + defaultReader.getEncoding());
System.out.println("UTF-8 encoding: " + utf8Reader.getEncoding());
输出
Default encoding: Cp1252 UTF-8 encoding: UTF-8
未指定编码时,getEncoding() 返回平台默认字符集。
注意: 显式编码用 Charset.forName()。详见 Java Charset 文档。
close()
使用后始终关闭 reader。上述 try-with-resources 自动处理,也可显式调 reader.close()。
其他实用方法
| 方法 | 描述 |
|---|---|
ready() | 检查流是否准备好读取 |
mark(int readAheadLimit) | 标记当前位置供后续重置 |
reset() | 回到最后标记位置 |
完整参考访问官方 InputStreamReader 页面。
java
- 深入理解 Java final 关键字:变量、方法与类的不可变性
- Java instanceof 运算符完全指南:用法、继承与接口检查
- 精通 Java 继承:核心概念、类型与实战示例
- 深入理解 Java 静态嵌套类:用法、差异与实战示例
- 精通 Java 匿名内部类:定义、语法与实战示例
- Java 单例模式详解:安全实现与使用指南
- 精通 Java 反射:运行时检查类、方法与字段
- 精通 Java ArrayList:操作、方法与最佳实践
- 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
- 掌握 Java Scanner:读取文本、数字与复杂类型的综合指南
- 掌握 Java 泛型:构建可复用、类型安全的代码
- 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除