7

我真的很困惑各种 io 类的用途,例如,如果我们有 BufferedWriter,为什么我们需要一个 PrintWriter?

BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;      
while(s=br.readline()!=null) {
      PrintWriter fs = new PrintWriter(new FileWriter(file));
      fs.println(s);
}

如果 BufferedWriter 帮不上忙?我只是不明白这些 io 类之间的区别,有人可以解释一下吗?

4

3 回答 3

8

他们彼此没有任何关系。事实上,我很少使用PrintWriter除了System.out临时转换。但无论如何。

BufferedWriter,就像BufferedReader//仅仅用一个内存缓冲区装饰封闭的(你可以指定大小)或接受一个默认值。这在写入慢速写入器(如基于网络或文件的写入器)时非常有用。(例如,内容在内存中提交,并且仅偶尔提交到磁盘)通过在内存中进行缓冲,速度大大提高 - 尝试编写写一个 10 mb 文件的代码,然后将其与环绕它的相同文件进行比较。BufferedInputStreamBufferedOutputStreamWriterFileWriterBufferedWriter

就是这样BufferedWriter。它引入了一些方便的方法,但大多数情况下它只提供这个内存缓冲区。

PrintWriter主要是一个简单的装饰器,它为各种类型(如String,float等)添加了一些特定的写入方法,因此您不必将所有内容都转换为原始字节。

编辑:

已经出现了

于 2011-04-23T18:20:53.473 回答
4

PrintWriter本质上是一个便利类。如果您想快速轻松地将一行文本发送到例如日志文件中,PrintWriter 让这一切变得非常简单。

三大特点:

  • printandprintln方法将采用任何数据类型并为您进行转换。不只是String
  • 这种相对较新的format方法是物超所值的。现在用 C 风格的格式控制在 Java 中输出一行文本就像在 C 中一样简单。
  • 这些方法永远不会抛出异常!一些程序员对从未听说过出错的可能性感到震惊。但是,如果它是一个一次性程序或做一些非常简单的事情,那么便利性会很好。特别是如果输出是System.outSystem.err几乎没有出错的方法。
于 2011-04-23T18:22:34.563 回答
1

使用 PrintWriter 的主要原因是访问 printXXX 方法(如 println(int))。您基本上可以使用 PrintWriter 写入文件,就像使用 System.out 写入控制台一样。

BufferedWriter 是写入文件(或其他任何内容)的有效方法,因为它会在写入文件之前将字符缓冲在 Java 内存中。

于 2014-06-13T10:28:27.250 回答