【问题标题】:Buffer and File in JavaJava中的缓冲区和文件
【发布时间】:2021-07-07 11:59:17
【问题描述】:

我是java新手,想问一下使用FileReader-FileWriter和使用BufferedReader-BufferedWriter有什么区别。除了速度之外,还有其他使用缓冲的理由吗? 在复制文件并将其内容粘贴到另一个文件的代码中,使用 BufferedReader 和 BufferedWriter 更好吗?

【问题讨论】:

  • 我对你的问题有点困惑。如果要复制粘贴文件,则需要读取它,然后再次写入,(或指示操作系统这样做,而不用 Java 缓冲)。因此,您将需要 Reader 和 Writer。文件读取器(和写入器)是 java 经典 IO 流中的端点,只负责读取/写入文件,但不定义如何处理它。另一方面,BufferedReader/Writer 是流间段。在没有底层流的情况下,它们不能直接用于读取/写入文件。

标签: java bufferedreader filereader filewriter bufferedwriter


【解决方案1】:

简短的版本是:文件写入器/读取器速度快但效率低,但缓冲写入器/读取器保存写入/读取并以块的形式进行(基于缓冲区大小),效率更高但速度可能更慢(等待缓冲区填满)。

因此,要回答您的问题,缓冲的写入器/读取器通常是最好的,尤其是在您不确定使用哪一个时。

看看JavaDoc for the BufferedWriter,它很好地解释了它的工作原理:

一般来说,Writer 会立即将其输出发送到底层 字符或字节流。除非需要提示输出,否则 建议在任何具有 write() 的 Writer 周围包装一个 BufferedWriter 操作可能很昂贵,例如 FileWriters 和 OutputStreamWriters。 例如,

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));

会将 PrintWriter 的输出缓冲到文件中。无需缓冲, 每次调用 print() 方法都会导致字符 转换成字节,然后立即写入 文件,这可能非常低效。

【讨论】:

  • 另外,如果你想要输入“行”的概念,那么你通常需要一个实现这个概念的类——比如 BufferedReader。
猜你喜欢
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 2016-02-19
  • 2012-10-08
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多