当前位置: 首页 > 面试题库 >

Java在FileWriter和BufferedWriter之间的区别

轩辕越泽
2023-03-14
问题内容

两者之间有什么区别?我只是在学习Java ATM,但似乎可以双向写文件,即(我没有在这里复制try-catch块。)

FileWriter file = new FileWriter("foo.txt");
file.write("foobar");
file.close();

FileWriter file = new FileWriter("foo.txt");
BufferedWriter bf = new BufferedWriter(file);
bf.write("foobar");
bf.close();

我了解先缓冲数据的概念,这是否意味着第一个示例将字符一个接一个地写入,而第二个第一个示例则将其缓冲到内存中并写入一次?


问题答案:

如果您使用BufferedWriter则效率更高

  • 在刷新/关闭之间有多次写入
  • 与缓冲区大小相比,写操作较小。

在您的示例中,您只有一次写入,因此BufferedWriter只会增加您不需要的开销。

这是否意味着第一个示例一个接一个地写入字符,第二个第一个将其缓冲到内存中并写入一次

在这两种情况下,字符串都是一次写入的。

如果仅使用FileWriter,则您的write(String)调用

 public void write(String str, int off, int len) 
        // some code
        str.getChars(off, (off + len), cbuf, 0);
        write(cbuf, 0, len);
 }

每次调用write(String)都会进行一次系统调用。

BufferedWriter提高效率的地方是进行多次小写操作。

for(int i = 0; i < 100; i++) {
    writer.write("foorbar");
    writer.write(NEW_LINE);
}
writer.close();

如果没有BufferedWriter,则可能会进行200(2 * 100)次系统调用并将其写入磁盘效率低下。使用BufferedWriter,可以将它们全部一起缓冲,并且由于默认缓冲区大小为8192个字符,因此这仅是1个要写入的系统调用



 类似资料:
  • 这两者有什么区别?我只是在学习Java ATM,但似乎我可以双向写入文件,即(我没有复制try-catch块) 和 我理解先缓冲数据的概念,那么这是否意味着第一个示例逐个写入字符,第二个示例先将其缓冲到内存中并写入一次?

  • 我想知道FileWriter是否缓冲。 在这个SO问题中,它似乎是,然而在这个SO问题中,它似乎不是。(这将是每次写入(...)被调用时的系统调用。 所以基本上读这两个问题 提前感谢。 编辑:通过阅读此API解决了问题,我引用了相关部分: 每次调用write()方法都会导致对给定字符调用编码转换器。在写入底层输出流之前,生成的字节在缓冲区中累积。可以指定此缓冲区的大小,但默认情况下,它对于大多数用

  • 问题内容: 我需要知道Java中的flush和close函数之间的确切区别是什么? 并且在写入文件期间将数据转储到文件中时? 请提供一个例子 问题答案: flush()将缓冲区的内容写入目标,并使缓冲区为空以供其他数据存储,但不会永久关闭流。这意味着您仍然可以向流中写入更多数据。 但是close()会永久关闭流。如果要进一步写入一些数据,则必须再次重新打开流,并将数据附加到现有数据之后。

  • 问题内容: 当我使用一些线程将数据写入单个文件时遇到问题。 我设置的缓冲区大小,但是无论设置多少,当缓冲区为8192(默认缓冲区大小)而不是我设置的大小(此处为16384)时,它都会将数据刷新到磁盘。我的代码有问题吗? 这就是我构建的方式: 这是完整的代码: 问题答案: 我通过使用OutputStream而不是writer解决了问题,这是代码:

  • 本文向大家介绍Java和JavaScript之间的区别。,包括了Java和JavaScript之间的区别。的使用技巧和注意事项,需要的朋友参考一下 众所周知,Java和javascript都是编程语言,并在应用程序开发中使用。但是我们将在下面讨论的两种语言之间存在显着差异。 以下是Java和JavaScript之间的重要区别。 序号 键 爪哇 的JavaScript 1个 语言类型 JavaScr

  • 本文向大家介绍Go和Java之间的区别。,包括了Go和Java之间的区别。的使用技巧和注意事项,需要的朋友参考一下 走 Go是一种过程编程语言。程序是使用程序包组装的。它支持类似于动态语言的环境采用模式。 爪哇 Java是一种面向对象的编程语言。Java安静,快速,可靠且安全。它也是最广泛使用的语言。 以下是Go和Java之间的重要区别。 序号 键 走 爪哇 1 类型 Go是一种过程编程语言,并支