模块 java.base
 java.io

类 Reader

java.lang.Object
java.io.Reader
所有已实现的接口:
Closeable , AutoCloseable , Readable
已知子类:
BufferedReader , CharArrayReader , FilterReader , InputStreamReader , PipedReader , StringReader

public abstract class Reader extends Object implements Readable , Closeable
读取字符流的抽象类。子类必须实现的唯一方法是 read(char[], int, int) 和 close()。然而,大多数子类将重写此处定义的一些方法,以提供更高的效率和/或附加功能。
自从:
1.1
参见:
  • 字段摘要

    字段
    修饰符和类型
    Field
    描述
    protected Object
    用于同步此流上的操作的对象。
  • 构造方法总结

    构造方法
    修饰符
    构造方法
    描述
    protected
    创建一个新的字符流阅读器,其关键部分将在阅读器本身上同步。
    protected
    Reader(Object lock)
    创建一个新的字符流阅读器,其关键部分将在给定对象上同步。
  • 方法总结

    修饰符和类型
    方法
    描述
    abstract void
    关闭流并释放与其关联的任何系统资源。
    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
    告知此流是否已准备好读取。
    void
    重置流。
    long
    skip(long n)
    跳过字符。
    long
    从此读取器读取所有字符,并按照读取顺序将字符写入给定的写入器。

    在类 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 - 要同步的对象。
  • 方法详情

    • nullReader

      public static Reader  nullReader()
      返回一个不读取任何字符的新 Reader。返回的流最初是打开的。通过调用 close() 方法关闭流。对 close() 的后续调用无效。

      当流打开时,read()read(char[])read(char[], int, int)read(CharBuffer) ready()skip(long)transferTo() 方法的行为都好像已到达流的结尾。流关闭后,这些方法都会抛出 IOException

      markSupported() 方法返回 falsemark()reset() 方法抛出一个 IOException

      未指定用于同步返回的 Reader 操作的 object

      返回:
      Reader 不读取任何字符
      自从:
      11
    • read

      public int read(CharBuffer  target) throws IOException
      尝试将字符读入指定的字符缓冲区。缓冲区按原样用作字符存储库:所做的唯一更改是 put 操作的结果。不执行缓冲区的翻转或倒带。
      指定者:
      read 在接口 Readable
      参数:
      target - 将字符读入的缓冲区
      返回:
      添加到缓冲区的字符数,如果此字符源在其末尾则为 -1
      抛出:
      IOException - 如果发生 I/O 错误
      NullPointerException - 如果目标为空
      ReadOnlyBufferException - 如果目标是只读缓冲区
      自从:
      1.5
    • read

      public int read() throws IOException
      读取单个字符。此方法将阻塞,直到有字符可用、发生 I/O 错误或到达流的末尾。

      打算支持有效的单字符输入的子类应该重写这个方法。

      返回:
      读取的字符,作为 0 到 65535 (0x00-0xffff) 范围内的整数,如果已到达流的末尾,则为 -1
      抛出:
      IOException - 如果发生 I/O 错误
    • read

      public int read(char[] cbuf) throws IOException
      将字符读入数组。此方法将阻塞,直到某些输入可用、发生 I/O 错误或到达流的末尾。

      如果 cbuf 的长度为零,则不读取任何字符并返回 0;否则,将尝试读取至少一个字符。如果由于流已结束而没有可用字符,则返回值 -1;否则,至少读取一个字符并将其存储到 cbuf 中。

      参数:
      cbuf - 目标缓冲区
      返回:
      读取的字符数,如果已到达流末尾则为 -1
      抛出:
      IOException - 如果发生 I/O 错误
    • read

      public abstract int read(char[] cbuf, int off, int len) throws IOException
      将字符读入数组的一部分。此方法将阻塞,直到某些输入可用、发生 I/O 错误或到达流的末尾。

      如果 len 为零,则不读取任何字符并返回 0;否则,将尝试读取至少一个字符。如果由于流已结束而没有可用字符,则返回值 -1;否则,至少读取一个字符并将其存储到 cbuf 中。

      参数:
      cbuf - 目标缓冲区
      off - 开始存储字符的偏移量
      len - 要读取的最大字符数
      返回:
      读取的字符数,如果已到达流末尾则为 -1
      抛出:
      IndexOutOfBoundsException - 如果 off 为负,或 len 为负,或 len 大于 cbuf.length - off
      IOException - 如果发生 I/O 错误
    • 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。子类应该重写这个方法。
      返回:
      当且仅当此流支持标记操作时才为真。
    • 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。关闭之前关闭的流没有任何效果。
      指定者:
      close 在接口 AutoCloseable
      指定者:
      close 在接口 Closeable
      抛出:
      IOException - 如果发生 I/O 错误
    • transferTo

      public long transferTo(Writer  out) throws IOException
      从此读取器读取所有字符,并按照读取顺序将字符写入给定的写入器。返回时,该阅读器将位于流的末尾。此方法不会关闭读取器或写入器。

      此方法可能会无限期地阻止读取器读取或写入写入器。读者和/或作者是的情况下的行为异步关闭,或传输期间中断的线程,高度特定于读写器,因此未指定。

      如果从读取器读取或向写入器写入时发生 I/O 错误,那么它可能会在读取或写入某些字符后发生错误。因此,读取器可能不在流的末尾,并且一个或两个流可能处于不一致状态。强烈建议在发生 I/O 错误时立即关闭两个流。

      参数:
      out - 作者,非空
      返回:
      传输的字符数
      抛出:
      IOException - 如果读取或写入时发生 I/O 错误
      NullPointerException - 如果 outnull
      自从:
      10