返回
深入剖析 InputStreamReader:Java IO 之旅
后端
2023-11-20 09:26:25
字符流与字节流
在 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() 等。