Reader
java.lang.Object
|—java.io.Reader
public abstract class Reader
extends Object
implements Readable, Closeable
用于读取字符流的抽象类。 子类必须实现的唯一方法是 read(char[], int, int) 和 close()。 然而,大多数子类将覆盖此处定义的一些方法,以提供更高的效率、附加功能或两者兼而有之。
Since:
JDK1.1
字段摘要
修饰符和类型 | 字段 | 描述 |
---|---|---|
protected Object | lock | 用于同步此流上的操作的对象。 |
构造函数摘要
修饰符 | 构造函数 | 描述 |
---|---|---|
protected | Reader() | 创建一个新的字符流阅读器,其关键部分将在阅读器本身上同步。 |
protected | Reader(Object lock) | 创建一个新的字符流阅读器,其关键部分将在给定对象上同步。 |
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
abstract void | close() | 关闭流并释放与其关联的任何系统资源。 |
void | mark(int readAheadLimit) | 标记流中的当前位置。 |
boolean | markSupported() | 告知此流是否支持 mark() 操作。 |
int | read() | 读取单个字符。 |
int | read(char[] cbuf) | 将字符读入数组。 |
abstract int | read(char[] cbuf, int off, int len) | 将字符读入数组的一部分。 |
int | read(CharBuffer target) | 尝试将字符读入指定的字符缓冲区。 |
boolean | ready() | 告诉这个流是否准备好被读取。 |
void | reset() | 重置流。 |
long | skip(long n) | 跳过字符。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息
lock
protected Object lock
用于同步此流上的操作的对象。 为了提高效率,字符流对象可以使用自身以外的对象来保护临界区。 因此,子类应该使用该字段中的对象而不是 this 或同步方法。
构造函数详细信息
Reader
protected Reader()
创建一个新的字符流阅读器,其关键部分将在阅读器本身上同步。
Reader
protected Reader(Object lock)
创建一个新的字符流阅读器,其关键部分将在给定对象上同步。
参数:
参数名称 | 参数描述 |
---|---|
lock | 要同步的对象。 |
方法详情
read
public int read(CharBuffer target) throws IOException
尝试将字符读入指定的字符缓冲区。 缓冲区按原样用作字符的存储库:所做的唯一更改是 put 操作的结果。 不执行缓冲区的翻转或倒带。
指定者:
读入接口Readable
参数:
参数名称 | 参数描述 |
---|---|
target | 将字符读入的缓冲区 |
返回:
添加到缓冲区的字符数,如果此字符源位于其末尾,则为 -1
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误 |
NullPointerException | 如果 target 为空 |
ReadOnlyBufferException | 如果 target 是只读缓冲区 |
Since:
1.5
read
public int read() throws IOException
读取单个字符。 此方法将阻塞,直到字符可用、发生 I/O 错误或到达流的末尾。
打算支持有效的单字符输入的子类应覆盖此方法。
返回:
读取的字符,为 0 到 65535 (0x00-0xffff) 范围内的整数,如果已到达流的末尾,则为 -1
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误 |
read
public int read(char[] cbuf) throws IOException
将字符读入数组。 此方法将阻塞,直到某些输入可用、发生 I/O 错误或到达流的末尾。
参数:
参数名称 | 参数描述 |
---|---|
cbuf | 目标缓冲区 |
返回:
读取的字符数,如果已到达流的末尾,则为 -1
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误 |
read
public abstract int read(char[] cbuf, int off, int len) throws IOException
将字符读入数组的一部分。 此方法将阻塞,直到某些输入可用、发生 I/O 错误或到达流的末尾。
参数:
参数名称 | 参数描述 |
---|---|
cbuf | 目标缓冲区 |
off | 开始存储字符的偏移量 |
len | 要读取的最大字符数 |
返回:
读取的字符数,如果已到达流的末尾,则为 -1
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误 |
skip
public long skip(long n) throws IOException
跳过字符。 此方法将阻塞,直到某些字符可用、发生 I/O 错误或到达流的末尾。
参数:
参数名称 | 参数描述 |
---|---|
n | 要跳过的字符数 |
返回:
实际跳过的字符数
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 n 为负数。 |
IOException | 如果发生 I/O 错误 |
ready
public boolean ready() throws IOException
告诉这个流是否准备好被读取。
返回:
如果保证下一个 read() 不会阻塞输入,则为 true,否则为 false。 请注意,返回 false 并不能保证下一次读取将阻塞。
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误 |
markSupported
public boolean markSupported()
告知此流是否支持 mark() 操作。 默认实现总是返回 false。 子类应覆盖此方法。
返回:
当且仅当此流支持标记操作时才为 true。
mark
public void mark(int readAheadLimit) throws IOException
标记流中的当前位置。 对 reset() 的后续调用将尝试将流重新定位到该点。 并非所有字符输入流都支持 mark() 操作。
参数:
参数名称 | 参数描述 |
---|---|
readAheadLimit | 在保留标记的同时限制可以读取的字符数。 读取这么多字符后,尝试重置流可能会失败。 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果流不支持 mark(),或者发生其他一些 I/O 错误 |
reset
public void reset() throws IOException
重置流。 如果流已被标记,则尝试将其重新定位在标记处。 如果流尚未被标记,则尝试以适合特定流的某种方式将其重置,例如将其重新定位到其起点。 并非所有字符输入流都支持 reset() 操作,有些支持 reset() 但不支持 mark()。
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果流没有被标记,或者标记已经失效,或者流不支持 reset(),或者发生其他一些 I/O 错误 |
close
public abstract void close() throws IOException
关闭流并释放与其关联的任何系统资源。 关闭流后,进一步的 read()、ready()、mark()、reset() 或 skip() 调用将引发 IOException。 关闭以前关闭的流没有效果。
指定者:
在接口 AutoCloseable 中关闭
指定者:
在接口Closeable中关闭
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误 |