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。
posted @ 2025-12-02 10:58  那就改变世界吧  阅读(0)  评论(0)    收藏  举报