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