【问题标题】:What are the efficiency implications of using BufferedReader?使用 BufferedReader 对效率有何影响?
【发布时间】:2011-10-26 07:46:15
【问题描述】:

这两种从文件中读取字符的方法有什么区别。

第一

FileReader fr = new FileReader( new File( "file.txt") );
int x = 0;
while( ( x = fr.read() ) != -1 ) {
    System.out.println( (char) x );
}

第二次

BufferedReader bfr = new BufferedReader( new FileReader( new File( "file.txt") ) );
int x = 0;
while( ( x = bfr.read() ) != -1 ) {
    System.out.println( (char) x );
}

这两个代码都从文件中读取字符并将其写入控制台。

哪种方法更有效,为什么? 还是一样的?

【问题讨论】:

  • 你试过哪个更快?为什么你认为它可能会更快? BufferedReader 的 Javadoc 是怎么说的?

标签: java file bufferedreader


【解决方案1】:

这样说docs

通常,由 Reader 发出的每个读取请求都会导致对底层字符或字节流发出相应的读取请求。因此,建议将 BufferedReader 包裹在任何 read() 操作可能代价高昂的 Reader 周围,例如 FileReaders 和 InputStreamReaders。

【讨论】:

  • +1 有用性;我会为“如此说”多加一个+1,但不幸的是我不能:)
  • underlying character or byte stream 是什么意思。这是什么?
  • @grassPro:例如,文件系统。
  • 我认为描述流的最佳方式是将它们视为来自源的数据——例如硬盘驱动器或互联网连接。
  • 不幸的是,没有完全遵循:P。 “由 Reader 发出的每个读取请求都会导致对底层字符或字节流发出相应的读取请求。” “相应的读取请求”如何影响效率,缓冲读取器如何解决这个缺点?
【解决方案2】:

只是对@cwallenpoole 的回答的一点补充。界面也有区别。例如,在 BufferedReader 中有一个不错的方法 readLine(),我大量使用。

【讨论】:

    【解决方案3】:

    考虑一个距离您 5 公里的水箱。对于每一桶水,您必须行驶 5 公里。为了减少你的努力,你带一个小罐子,装满一次 3-4 天。然后从你房子里的小水箱里装满你的水桶。

    在上面的例子中,5公里外的水箱是硬盘上的一个文件,如果你使用裸读器,每桶水就相当于走了5公里。所以你带了一个小坦克(BufferedReader)。

    【讨论】:

      猜你喜欢
      • 2011-12-20
      • 2014-02-26
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      • 2013-04-14
      • 1970-01-01
      • 2020-07-09
      相关资源
      最近更新 更多