Java BufferedReader

时间:2020-02-23 14:36:23  来源:igfitidea点击:

Java BufferedReader类是java.io包的一部分。

BufferedReader是java.io.Reader类的子类。

Java BufferedReader

  • BufferedReader从字符输入流读取文本,缓冲字符,以便有效读取字符,数组和行。

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

  • 与FileReader相比,BufferedReader一次从文件读取相对较大的数据块,并将此数据保留在缓冲区中。
    当您要求输入下一个字符或者数据行时,将从缓冲区中检索它,这减少了执行耗时的文件读取操作的次数。

  • 通常,读取器发出的每个读取请求都会导致对基础字符或者字节流进行相应的读取请求。
    因此,建议将" BufferedReader"包装在其" read()"操作可能很昂贵的任何阅读器周围,例如FileReader和" InputStreamReader"。
    例如;
    上面的代码将缓冲来自指定文件的输入。
    如果不进行缓冲,则每次调用read()或者readLine()都会导致从文件中读取字节,将其转换为字符,然后返回,这可能会非常低效。

Java BufferedReader构造函数

  • BufferedReader(Reader in):创建一个缓冲字符输入流,该流使用带有指定Reader对象的默认大小的输入缓冲区。

  • BufferedReader(Reader in,int sz):创建一个缓冲字符输入流,该流使用指定大小的输入缓冲区和指定的Reader对象使用输入缓冲区。

Java BufferedReader示例

让我们看一下BufferedReader类的重要方法。

  • read():此方法读取单个字符,并以0到65535(0x00-0xffff)范围内的整数形式返回该字符,如果已到达流的末尾,则返回-1。

BufferedReader实现了AutoCloseable接口,因此我们在使用BufferedReader类时可以尝试使用资源。
让我们来看下面的示例程序。

  • read(char [] cbuf,int off,int len):该方法将字符读入指定的数组。
    它尝试通过重复调用基础流的read方法来读取尽可能多的字符。
    重复进行此反复读取,直到满足以下条件之一为止:已读取指定数量的字符
  • 基础流的read()方法返回-1,表示文件结束
  • 基础流的ready()方法返回false,指示其他输入请求将被阻塞。

如果对基础流的第一次读取返回-1表示文件结束,则此方法返回-1。
否则,此方法返回实际读取的字符数。

BufferedReader in = new BufferedReader(new FileReader("file.txt"));
  • readLine():此方法读取一行文本。
    某行被认为由换行符('\ n'),回车符('\ r')或者回车符(紧随换行符)中的任何一个终止,并且它返回包含以下内容的String该行,不包含任何行终止符;如果已到达流的末尾,则为null。

  • ready():此方法检查此流是否已准备好被读取。
    如果缓冲区不为空,或者如果基础字符流已准备好,则缓冲的字符流准备就绪,并且如果保证下一个read()不会阻塞输入,则返回true,否则返回false。
    请注意,返回false不能保证下一次读取将被阻止。

  • skip(long n):此方法跳过指定的数字字符,并返回实际跳过的字符数。
    如果n为负数,它将抛出IllegalArgumentException

还要检查Java读取文本文件,以获取有关如何在Java中读取文本文件的更多信息。

BufferedReader与扫描仪

  • BufferedReader同步,而Scanner不同步。

  • BufferedReader具有较大的缓冲区(8KB字节缓冲区),而Scanner具有较小的缓冲区(1KB char缓冲区)。

  • BufferedReader比Scanner更快。

  • 扫描器从流的内容中解析令牌,而BufferedReader仅读取流。