04.用InputStream一次读取一个字符
步骤
方式1
用 InputStreamReader 包装 InputStream,InputStreamReader 会根据指定的编码将字节流中的字节序列转换为单个字符(包括中文),read () 方法一次返回一个字符的 Unicode 码值,刚好可用 int 去接收。
// 解决中文乱码:用 InputStreamReader 指定 UTF-8 编码
//try-with-resources 语法支持:
//InputStreamReader 实现了 AutoCloseable 接口(JDK 7 引入),
//因此可以直接放在 try() 括号内,无需手动调用 close() 方法,
//程序结束后会自动释放流资源(包括底层关联的 FileInputStream),避免资源泄露。
try (InputStreamReader isr = new InputStreamReader(
new FileInputStream(filePath), "UTF-8")) {
int readChar;
while ((readChar = isr.read()) != -1) {
System.out.print((char) readChar); // 正常显示中文
}
} catch (IOException e) {
e.printStackTrace();
}
方式2
用 BufferedReader 包装 InputStreamReader。
- read () 一次一个,用 int 接收
- readLine () 一次一行,用 String line 收
行结尾标志
\r \r\n \n
总结
InputStreamReader 依赖于底层 InputStream 的字节读取能力.
- 特有引用:通过构造方法接收 InputStream 并保存,作为字节数据源的唯一来源。
- 编解码转换:使用指定的编码 (通过 charsetDecoder) 将底层字节流的字节解码为字符。
- 缓冲优化:通过字节 / 字符缓冲区减少 I/O 操作,提升读取效率。
- 资源联动:关闭 InputStreamReader 时会同步关闭被包装的 InputStream。

浙公网安备 33010602011771号