Module java.base
Package java.io

Class 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 Summary

    Fields
    Modifier and Type
    Field
    Description
    protected Object
    用于同步此流上操作的对象。
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    Reader()
    创建一个新的字符流阅读器,其关键部分将在阅读器本身上同步。
    protected
    Reader(Object lock)
    创建一个新的字符流阅读器,其关键部分将在给定对象上同步。
  • Method Summary

    Modifier and Type
    Method
    Description
    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
    从此阅读器中读取所有字符,并按照读取顺序将字符写入给定的写入器。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • lock

      protected Object lock
      用于同步此流上操作的对象。为了效率,字符流对象可能使用除自身以外的对象来保护关键部分。因此,子类应该使用此字段中的对象,而不是this或同步方法。
  • Constructor Details

    • Reader

      protected Reader()
      创建一个新的字符流阅读器,其关键部分将在阅读器本身上同步。
    • Reader

      protected Reader(Object lock)
      创建一个新的字符流阅读器,其关键部分将在给定对象上同步。
      参数:
      lock - 要同步的对象。
  • Method Details

    • 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 - 如果目标为null
      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操作,则为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。关闭先前关闭的流没有任何效果。
      指定者:
      close 在接口 AutoCloseable
      指定者:
      close 在接口 Closeable
      抛出:
      IOException - 如果发生I/O错误
    • transferTo

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

      此方法可能会无限期地阻塞从读取器读取或写入到写入器。当读取器和/或写入器被异步关闭,或者在传输过程中线程被中断时的行为是高度特定于读取器和写入器的,因此未指定。

      如果传输的字符总数大于Long.MAX_VALUE,则将返回Long.MAX_VALUE

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

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