FILEWRITE的BufferedWriter和PrintWriter的结合(FileWrite

2019-08-19 09:07发布

好了,所以我正在学习有关的I / O,我发现下面的代码在一个幻灯片。 有人可以解释为什么有必要有一个FILEWRITE,但是BufferedWriter和PrintWriter的? 我知道,但是BufferedWriter缓冲输出,并把它一下子,但他们为什么要使用的FileWriter和PrintWriter的? 不,他们几乎做同样的位错误处理等的区别?

而且为什么他们通过bwPrintWriter

      FileWriter fw = new FileWriter (file);
      BufferedWriter bw = new BufferedWriter (fw);
      PrintWriter outFile = new PrintWriter (bw);

Answer 1:

据推测,他们正在使用FileWriter ,因为他们要写入文件。 双方BufferedWriterPrintWriter都被赋予另一位作家写-你需要一些最终目的地。

(我个人不喜欢FileWriter ,因为它不会让你指定的编码方式。我喜欢用FileOutputStream包裹在一个OutputStreamWriter ,但是这是一个不同的问题。)

BufferedWriter用于缓冲,就像你说的-虽然它并不缓存所有的输出,只是它的一个固定量(缓冲区的大小)。 它创建“大块”写入底层作家。

至于使用的PrintWriter -嗯,这暴露了一些额外的方法如println 。 我个人不喜欢它,因为它吞下异常(你必须有明确检查checkError ,仍然没有给出细节,我不认为我见过使用),但同样这取决于你在做什么。 该PrintWriter是通过BufferedWriter作为目的地。

所以,你已经证明大概会写的部分代码如下PrintWriter ,这将写入BufferedWriter ,这将(当其缓冲区已满,或者它刷新或关闭)写信给FileWriter ,这将反过来转换字符数据到磁盘上的字节。



Answer 2:

从文档 :

在一般情况下,一个Writer立即将其输出发送到基础字符或字节流。 除非要求提示输出,最好是环绕任何作家,写()操作可能是昂贵的,如FileWriters和OutputStreamWriters一个的BufferedWriter。 例如,

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

将缓冲PrintWriter的输出到文件中。 如果没有缓冲,打印()方法的每一次调用会引起字符被转换为将被立即写入到文件的字节,它可以是非常低效的。

你可以从这个理解, BufferedWriter是写东西的有效途径。

将文本写入字符输出流,缓冲字符,从而提供单个字符,数组和字符串的高效写入。

一个FileWriter对象传递给BufferedWriter这里的意图是写使用一些输出文件BufferedWriter

最后,一个PrintWriter用于print*方法,如println()



Answer 3:

为PrintWriter从这里

打印格式化对象的表示到一个文本输出流。 这个类实现了全部在PrintStream中的印刷方法。 它不包含用于写入原始字节,对于这一个程序应使用未编码的字节流的方法。

从上面的语句似乎主要理由使用PrintWriter的是得到的所有方法访问PrintStream类似println() println(char [] x)等。

但是BufferedWriter,你是对的它的写入一个文件,因为它会缓冲的字符到虚拟内存直接写入文件前,用想出最好的办法一个newLine()方法。

FileWriter的从这里

FileWriter的是为写字符流。 对于写原始字节流,请考虑使用一个FileOutputStream



Answer 4:

FileWriter是简单地写纯文本(不带格式)它不使用任何缓冲机制,无论发生什么事,它只是写它的方式。

BufferedWriter是包装为Writer类,以允许其能够使用缓冲器的功能(用于优化IO)。

PrintWriter打印格式的文本,您可以与数据一起提供的格式字符串,印刷,尽管它可以直接与任何合作Writer/OutputStream ,只需提供缓冲, Writer/OutputStream是第一个传递到BufferedWriter然后有格式化的文本被传递到PrintWriter



Answer 5:

通常情况下,这类作家链大约是抽象。 PrintWriter有一些有用的printprintln方法,如果你想打印字符串和线到一个文件,可以很方便。 直接与工作FileWriter ,你将不得不使用更多的“低层次”的API。 正如你说BufferedWriter约为缓冲。 所以基本上,你要输出到文件什么事,什么层次的抽象你喜欢。



Answer 6:

因为你要使用的最外层的PrintWriter其更复杂的格式中的对象被包裹在这个顺序。 BufferedWriter将必须的东西包裹。 所以FileWriter的,因此,是什么的BufferedWriter包装并在最里面的对象。



文章来源: FileWrite BufferedWriter and PrintWriter combined