返回

深入剖析 InputStreamReader:Java IO 之旅

后端

字符流与字节流

在 Java IO 体系中,字符流与字节流是两个重要的概念。字符流主要用于处理字符数据,而字节流则用于处理二进制数据。

字符流的代表类是 Reader,它可以将字节流中的字节数据转换为字符数据。字节流的代表类是 InputStream,它可以将文件或其他输入源中的字节数据读入内存。

InputStreamReader 是 Reader 的一个实现类,它可以将字节流中的字节数据转换为字符数据。InputStreamReader 使用指定的字符集将字节数据转换为字符数据。

InputStreamReader 的基本概念

InputStreamReader 是一个抽象类,它提供了将字节流转换为字符流的抽象接口。InputStreamReader 的子类可以将不同的字节流转换为字符流。

InputStreamReader 的常用子类包括:

  • FileReader:将文件中的字节数据转换为字符数据。
  • InputStreamReader:将字节流中的字节数据转换为字符数据。
  • StringReader:将字符串中的字符数据转换为字符流。

InputStreamReader 的常用方法

InputStreamReader 提供了多种方法来操作字符流。其中,最常用的方法包括:

  • read():从字符流中读取一个字符。
  • read(char[] cbuf):从字符流中读取多个字符。
  • skip(long n):跳过字符流中指定数量的字符。
  • mark(int readlimit):标记字符流中的当前位置。
  • reset():将字符流的当前位置重置到之前标记的位置。

InputStreamReader 的使用示例

下面是一个使用 InputStreamReader 的示例:

import java.io.FileInputStream;
import java.io.InputStreamReader;

public class InputStreamReaderDemo {

    public static void main(String[] args) throws Exception {
        // 创建一个 FileInputStream 对象,用于读取文件中的字节数据
        FileInputStream fis = new FileInputStream("test.txt");

        // 创建一个 InputStreamReader 对象,将 FileInputStream 对象包装成字符流
        InputStreamReader isr = new InputStreamReader(fis, "UTF-8");

        // 使用 InputStreamReader 对象读取字符流中的数据
        int ch;
        while ((ch = isr.read()) != -1) {
            System.out.print((char) ch);
        }

        // 关闭 InputStreamReader 对象
        isr.close();
    }
}

总结

InputStreamReader 是 Java IO 体系中一个重要的类,它可以将字节流中的字节数据转换为字符数据。InputStreamReader 有多种实现子类,可以将不同的字节流转换为字符流。InputStreamReader 提供了多种方法来操作字符流,包括 read()、read(char[] cbuf)、skip(long n)、mark(int readlimit) 和 reset() 等。