java.lang.Object
java.io.Reader
- 所有已实现的接口:
Closeable
,AutoCloseable
,Readable
- 已知子类:
BufferedReader
,CharArrayReader
,FilterReader
,InputStreamReader
,PipedReader
,StringReader
读取字符流的抽象类。子类必须实现的唯一方法是 read(char[], int, int) 和 close()。然而,大多数子类将重写此处定义的一些方法,以提供更高的效率和/或附加功能。
- 自从:
- 1.1
- 参见:
-
字段摘要
字段 -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述abstract void
close()
关闭流并释放与其关联的任何系统资源。void
mark
(int readAheadLimit) 标记流中的当前位置。boolean
告知此流是否支持 mark() 操作。static Reader
返回一个不读取任何字符的新Reader
。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) 跳过字符。long
transferTo
(Writer out) 从此读取器读取所有字符,并按照读取顺序将字符写入给定的写入器。
-
字段详细信息
-
lock
用于同步此流上的操作的对象。为了提高效率,字符流对象可以使用自身以外的对象来保护临界区。因此,子类应该使用该字段中的对象,而不是this
或同步方法。
-
-
构造方法详细信息
-
Reader
protected Reader()创建一个新的字符流阅读器,其关键部分将在阅读器本身上同步。 -
Reader
创建一个新的字符流阅读器,其关键部分将在给定对象上同步。- 参数:
lock
- 要同步的对象。
-
-
方法详情
-
nullReader
返回一个不读取任何字符的新Reader
。返回的流最初是打开的。通过调用close()
方法关闭流。对close()
的后续调用无效。当流打开时,
read()
、read(char[])
、read(char[], int, int)
、read(CharBuffer)
、ready()
、skip(long)
和transferTo()
方法的行为都好像已到达流的结尾。流关闭后,这些方法都会抛出IOException
。markSupported()
方法返回false
。mark()
和reset()
方法抛出一个IOException
。未指定用于同步返回的
Reader
操作的object
。- 返回:
Reader
不读取任何字符- 自从:
- 11
-
read
尝试将字符读入指定的字符缓冲区。缓冲区按原样用作字符存储库:所做的唯一更改是 put 操作的结果。不执行缓冲区的翻转或倒带。- 指定者:
read
在接口Readable
中- 参数:
target
- 将字符读入的缓冲区- 返回:
- 添加到缓冲区的字符数,如果此字符源在其末尾则为 -1
- 抛出:
IOException
- 如果发生 I/O 错误NullPointerException
- 如果目标为空ReadOnlyBufferException
- 如果目标是只读缓冲区- 自从:
- 1.5
-
read
读取单个字符。此方法将阻塞,直到有字符可用、发生 I/O 错误或到达流的末尾。打算支持有效的单字符输入的子类应该重写这个方法。
- 返回:
-
读取的字符,作为 0 到 65535 (
0x00-0xffff
) 范围内的整数,如果已到达流的末尾,则为 -1 - 抛出:
IOException
- 如果发生 I/O 错误
-
read
将字符读入数组。此方法将阻塞,直到某些输入可用、发生 I/O 错误或到达流的末尾。如果
cbuf
的长度为零,则不读取任何字符并返回0
;否则,将尝试读取至少一个字符。如果由于流已结束而没有可用字符,则返回值-1
;否则,至少读取一个字符并将其存储到cbuf
中。- 参数:
cbuf
- 目标缓冲区- 返回:
- 读取的字符数,如果已到达流末尾则为 -1
- 抛出:
IOException
- 如果发生 I/O 错误
-
read
将字符读入数组的一部分。此方法将阻塞,直到某些输入可用、发生 I/O 错误或到达流的末尾。如果
len
为零,则不读取任何字符并返回0
;否则,将尝试读取至少一个字符。如果由于流已结束而没有可用字符,则返回值-1
;否则,至少读取一个字符并将其存储到cbuf
中。- 参数:
cbuf
- 目标缓冲区off
- 开始存储字符的偏移量len
- 要读取的最大字符数- 返回:
- 读取的字符数,如果已到达流末尾则为 -1
- 抛出:
IndexOutOfBoundsException
- 如果off
为负,或len
为负,或len
大于cbuf.length - off
IOException
- 如果发生 I/O 错误
-
skip
跳过字符。此方法将阻塞,直到某些字符可用、发生 I/O 错误或到达流的末尾。如果在调用此方法之前流已经结束,则不会跳过任何字符并返回零。- 参数:
n
- 要跳过的字符数- 返回:
- 实际跳过的字符数
- 抛出:
IllegalArgumentException
- 如果n
为负。IOException
- 如果发生 I/O 错误
-
ready
告知此流是否已准备好读取。- 返回:
- 如果保证下一个 read() 不会阻塞输入,则为 True,否则为 false。请注意,返回 false 并不能保证下一次读取会阻塞。
- 抛出:
IOException
- 如果发生 I/O 错误
-
markSupported
public boolean markSupported()告知此流是否支持 mark() 操作。默认实现始终返回 false。子类应该重写这个方法。- 返回:
- 当且仅当此流支持标记操作时才为真。
-
mark
标记流中的当前位置。对 reset() 的后续调用将尝试将流重新定位到这一点。并非所有字符输入流都支持 mark() 操作。- 参数:
readAheadLimit
- 限制在仍保留标记的情况下可以读取的字符数。读取这么多字符后,尝试重置流可能会失败。- 抛出:
IOException
- 如果流不支持 mark(),或者发生其他 I/O 错误
-
reset
重置流。如果流已被标记,则尝试将其重新定位在标记处。如果流没有被标记,则尝试以某种适合特定流的方式重置它,例如通过将它重新定位到它的起点。并非所有字符输入流都支持 reset() 操作,有些支持 reset() 而不支持 mark()。- 抛出:
IOException
- 如果流没有被标记,或者标记已经失效,或者流不支持 reset(),或者发生其他一些 I/O 错误
-
close
关闭流并释放与其关联的任何系统资源。流关闭后,进一步的 read()、ready()、mark()、reset() 或 skip() 调用将抛出 IOException。关闭之前关闭的流没有任何效果。- 指定者:
close
在接口AutoCloseable
中- 指定者:
close
在接口Closeable
中- 抛出:
IOException
- 如果发生 I/O 错误
-
transferTo
从此读取器读取所有字符,并按照读取顺序将字符写入给定的写入器。返回时,该阅读器将位于流的末尾。此方法不会关闭读取器或写入器。此方法可能会无限期地阻止读取器读取或写入写入器。读者和/或作者是的情况下的行为异步关闭,或传输期间中断的线程,高度特定于读写器,因此未指定。
如果从读取器读取或向写入器写入时发生 I/O 错误,那么它可能会在读取或写入某些字符后发生错误。因此,读取器可能不在流的末尾,并且一个或两个流可能处于不一致状态。强烈建议在发生 I/O 错误时立即关闭两个流。
- 参数:
out
- 作者,非空- 返回:
- 传输的字符数
- 抛出:
IOException
- 如果读取或写入时发生 I/O 错误NullPointerException
- 如果out
是null
- 自从:
- 10
-