1. Reader类在Java I/O体系中的定位
Java中的Reader类是字符输入流的抽象基类,位于java.io包中。与处理字节流的InputStream不同,Reader专门用于读取字符数据,这对文本处理尤为重要。Reader的设计体现了Java I/O库的两个重要分层:
- 字节流与字符流的分离:InputStream/OutputStream处理原始字节,而Reader/Writer处理字符,自动处理字符编码问题
- 装饰器模式的应用:通过BufferedReader等装饰类为基本流添加功能
Reader的直接子类包括:
- BufferedReader:带缓冲的读取器
- InputStreamReader:字节流到字符流的桥梁
- FileReader:专门用于文件读取
- StringReader:从字符串读取
关键区别:Reader读取的是16位Unicode字符(char类型),而InputStream读取的是8位字节。这使得Reader能正确处理各种语言的文本数据。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Reader核心方法解析
2.1 必须实现的抽象方法
所有Reader子类必须实现以下两个方法:
java复制public abstract int read(char[] cbuf, int off, int len) throws IOException;
public abstract void close() throws IOException;
read(char[], int, int)方法是最基础的读取操作:
- 参数:目标字符数组、起始偏移量、最大读取长度
- 返回值:实际读取的字符数,-1表示流结束
- 典型实现会填充cbuf的off到off+len-1位置
2.2 便捷读取方法
Reader还提供了多个重载的读取方法:
java复制// 读取单个字符(0-65535)
public int read() throws IOException {
char cb[] = new char[1];
if (read(cb, 0, 1) == -1)
return -1;
else
return cb[0]
