java.lang.Object
java.io.Reader
- 所有已实现的接口:
-
Closeable
,AutoCloseable
,Readable
- 直接已知的子类:
-
BufferedReader
,CharArrayReader
,FilterReader
,InputStreamReader
,PipedReader
,StringReader
用于读取字符流的抽象类。子类必须实现的唯一方法是read(char[], int, int)和close()。然而,大多数子类将覆盖此处定义的一些方法,以提供更高的效率、额外的功能或两者兼有。
- 自:
- 1.1
- 参见:
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract 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) 从此阅读器中读取所有字符,并按照读取顺序将字符写入给定的写入器。
-
Field Details
-
lock
用于同步此流上操作的对象。为了效率,字符流对象可能使用除自身以外的对象来保护关键部分。因此,子类应该使用此字段中的对象,而不是this
或同步方法。
-
-
Constructor Details
-
Reader
protected Reader()创建一个新的字符流阅读器,其关键部分将在阅读器本身上同步。 -
Reader
创建一个新的字符流阅读器,其关键部分将在给定对象上同步。- 参数:
-
lock
- 要同步的对象。
-
-
Method Details
-
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
- 如果目标为null -
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操作,则为true。
-
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
从此读取器读取所有字符,并按照读取顺序将字符写入给定的写入器。返回时,此读取器将位于流的末尾。此方法不会关闭读取器或写入器。此方法可能会无限期地阻塞从读取器读取或写入到写入器。当读取器和/或写入器被异步关闭,或者在传输过程中线程被中断时的行为是高度特定于读取器和写入器的,因此未指定。
如果传输的字符总数大于Long.MAX_VALUE,则将返回
Long.MAX_VALUE
。如果在从读取器读取或写入到写入器时发生I/O错误,则在读取或写入一些字符后可能会发生错误。因此,读取器可能不在流的末尾,一个或两个流可能处于不一致状态。强烈建议如果发生I/O错误,则立即关闭这两个流。
- 参数:
-
out
- 写入器,非空 - 返回:
- 传输的字符数
- 抛出:
-
IOException
- 如果在读取或写入时发生I/O错误 -
NullPointerException
- 如果out
为null
- 自:
- 10
-