Module  java.base
软件包  java.io

Class BufferedReader

  • All Implemented Interfaces:
    CloseableAutoCloseableReadable
    已知直接子类:
    LineNumberReader


    public class BufferedReader
    extends Reader
    从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。

    可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。

    通常,由读取器做出的每个读取请求将引起对底层字符或字节流的相应读取请求。 因此,建议将BufferedReader包装在其read()操作可能昂贵的读取器上,例如FileReaders和InputStreamReaders。 例如,

      BufferedReader in
       = new BufferedReader(new FileReader("foo.in")); 
    将缓冲指定文件的输入。 没有缓冲,每次调用read()或readLine()可能会导致从文件中读取字节,转换成字符,然后返回,这可能非常低效。

    使用DataInputStreams进行文本输入的程序可以通过用适当的BufferedReader替换每个DataInputStream进行本地化。

    从以下版本开始:
    1.1
    另请参见:
    FileReaderInputStreamReaderFiles.newBufferedReader(java.nio.file.Path, java.nio.charset.Charset)
    • 构造方法详细信息

      • BufferedReader

        public BufferedReader​(Reader in,
                              int sz)
        创建使用指定大小的输入缓冲区的缓冲字符输入流。
        参数
        in - 读者
        sz - 输入缓冲区大小
        异常
        IllegalArgumentException - 如果是 sz <= 0
      • BufferedReader

        public BufferedReader​(Reader in)
        创建使用默认大小的输入缓冲区的缓冲字符输入流。
        参数
        in - 读者
    • 方法详细信息

      • read

        public int read​()
                 throws IOException
        读一个字符
        重写:
        readReader
        结果
        字符读取,作为0到65535( 0x00-0xffff )范围内的整数,如果流的末尾已达到-1
        异常
        IOException - 如果发生I / O错误
      • read

        public int read​(char[] cbuf,
                        int off,
                        int len)
                 throws IOException
        将字符读入数组的一部分。

        该方法执行Reader类对应的read方法的一般合同。 作为一个额外的方便,它尝试通过重复调用基础流的read方法来读取尽可能多的字符。 这次迭代read继续,直到满足下列条件之一为止:

        • 指定的字符数已被读取,
        • 底层流的read方法返回-1 ,表示文件结束,或
        • 底层流的ready方法返回false ,表示进一步的输入请求将被阻塞。
        如果基础流上的第一个read返回-1以指示文件结束,则此方法返回-1 否则,此方法返回实际读取的字符数。

        鼓励这个类的子类,但不是必需的,尝试以相同的方式读取尽可能多的字符。

        通常这种方法从这个流的字符缓冲区中获取字符,并根据需要从底层流中填充它。 但是,如果缓冲区为空,则该标记无效,并且所请求的长度至少与缓冲区一样大,则该方法将直接从基础流中读取字符到给定的数组中。 因此,冗余BufferedReader将不会不必要地复制数据。

        Specified by:
        readReader
        参数
        cbuf - 目标缓冲区
        off - 开始存储字符的偏移量
        len - 要读取的最大字符数
        结果
        读取的字符数,如果已经达到流的结尾,则为-1
        异常
        IOException - 如果发生I / O错误
        IndexOutOfBoundsException - 如果发生I / O错误
      • readLine

        public String readLine​()
                        throws IOException
        读一行文字。 一行被视为由换行符('\ n'),回车符('\ r')中的任意一个,紧跟换行符的回车符或通过到达文件末尾终止(EOF)。
        结果
        一个包含行的内容的字符串,不包括任何行终止字符,如果没有读取任何字符,如果流的结尾已经到达,则为null
        异常
        IOException - 如果发生I / O错误
        另请参见:
        Files.readAllLines(java.nio.file.Path, java.nio.charset.Charset)
      • ready

        public boolean ready​()
                      throws IOException
        告诉这个流是否准备好被读取。 如果缓冲区不为空,或者底层字符流准备就绪,则缓冲字符流就绪。
        重写:
        readyReader
        结果
        如果下一个read()保证不阻止输入,则为True,否则为false。 请注意,返回false并不能保证下一次读取将被阻止。
        异常
        IOException - 如果发生I / O错误
      • markSupported

        public boolean markSupported​()
        告诉这个流是否支持mark()操作。
        重写:
        markSupportedReader
        结果
        当且仅当此流支持标记操作时才为真。
      • mark

        public void mark​(int readAheadLimit)
                  throws IOException
        标记流中的当前位置。 对reset()的后续调用将尝试将流重新定位到此位置。
        重写:
        markReader
        参数
        readAheadLimit - 限制仍然保留标记时可能读取的字符数。 在读取字符到此限制或超出之后尝试重新设置流可能会失败。 大于输入缓冲区大小的限制值将导致新的缓冲区被分配,其大小不小于limit。 因此,应谨慎使用大量值。
        异常
        IllegalArgumentException - 如果是 readAheadLimit < 0
        IOException - 如果发生I / O错误
      • reset

        public void reset​()
                   throws IOException
        将流重置为最近的标记。
        重写:
        resetReader
        异常
        IOException - 如果流未被标记,或者标记已被无效
      • close

        public void close​()
                   throws IOException
        描述从类复制: Reader
        关闭流并释放与之相关联的任何系统资源。 一旦流已关闭,进一步的read(),ready(),mark(),reset()或skip()调用将抛出IOException。 关闭以前关闭的流无效。
        Specified by:
        close在接口 AutoCloseable
        Specified by:
        close在接口 Closeable
        Specified by:
        closeReader
        异常
        IOException - 如果发生I / O错误
      • lines

        public Stream<String> lines​()
        返回一个Stream ,其元素是从这个BufferedReader读取的行。 Stream是懒惰的人群,即只读在terminal stream operation期间。

        在执行终端流操作期间,读取器不能被操作。 否则,终端流操作的结果未定义。

        在执行终端流操作之后,不能保证读取器将处于从其读取下一个字符或行的特定位置。

        如果在访问底层的BufferedReader时抛出一个IOException ,它将被包裹在一个UncheckedIOException ,这将从引起读取的Stream方法抛出。 如果在关闭的BufferedReader中调用该方法,则此方法将返回一个Stream。 该流的任何操作需要在关闭之后从BufferedReader读取,将导致抛出UncheckedIOException异常。

        结果
        一个 Stream<String>提供了这个 BufferedReader描述的文本行
        从以下版本开始:
        1.8