模块  java.base
软件包  java.io

Class BufferedReader

  • 实现的所有接口
    CloseableAutoCloseableReadable
    已知直接子类:
    LineNumberReader

    public class BufferedReader
    extends Reader
    从字符输入流中读取文本,缓冲字符,以便有效地读取字符,数组和行。

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

    通常,由Reader构成的每个读取请求都会导致相应的读取请求由基础字符或字节流构成。 因此,建议将BufferedReader包装在任何read()操作可能代价高昂的Reader上,例如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 )范围内的整数,如果已到达流末尾, 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
        结果
        当且仅当此流支持标记操作时才返回true。
      • mark

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

        public void reset()
                   throws IOException
        将流重置为最新标记。
        重写:
        resetReader类中
        异常
        IOException - 如果从未标记过流,或者标记已失效
      • lines

        public Stream<String> lines()
        返回Stream ,其元素是从此BufferedReader读取的行。 Stream是延迟填充的,即只读在terminal stream operation期间发生。

        在执行终端流操作期间不得操作阅读器。 否则,终端流操作的结果是未定义的。

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

        如果IOException访问底层时被抛出BufferedReader ,它被包裹在一个UncheckedIOException其中将从抛出Stream方法导致所读取的发生。 如果在已关闭的BufferedReader上调用此方法将返回Stream。 该流上的任何操作都需要在BufferedReader关闭后从BufferedReader读取,这将导致抛出UncheckedIOException。

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