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

最快的文件写入方式?

宰鸿博
2023-03-14
问题内容

我做了一个方法,需要一个File和一个String。它用该字符串作为内容的新文件替换该文件。

这就是我所做的:

public static void Save(File file, String textToSave) {

    file.delete();
    try {
        BufferedWriter out = new BufferedWriter(new FileWriter(file));
        out.write(textToSave);
        out.close();
    } catch (IOException e) {
    }
}

但是,它非常缓慢。有时需要一分钟以上。

如何写出包含成千上万个字符的大文件?


问题答案:

确保分配了足够大的缓冲区:

BufferedWriter out = new BufferedWriter(new FileWriter(file), 32768);

您正在运行哪种操作系统?那也可以有很大的不同。但是,花一 分钟 时间写出一个小于大小的文件听起来像是系统问题。在Linux或其他*
ix系统上,您可以使用类似的方法strace来查看JVM是否进行了许多不必要的系统调用。(很久以前,Java I /
O非常笨拙,write()如果您不小心的话,会进行疯狂的低级系统调用,但是当我说“很久以前”时,我的意思是1998左右。)

编辑
—请注意,Java程序以一种简单的方式写入一个简单的文件(实际上却很慢)的情况在本质上是一种奇怪的情况。您能否确定在写入文件时CPU是否负载过重?不应该这样;这样的事情几乎应该没有CPU负载。



 类似资料:
  • 问题内容: 我试图创建一个随机的实数,整数,字母数字,字母字符串,然后写入文件,直到文件大小达到 10MB 为止。 代码如下。 大约需要 225.953125秒 才能完成。如何提高此程序的速度?请提供一些代码见解? 问题答案: 观察到的“缓慢”的两个主要原因: 您的while循环很慢,大约有一百万次迭代。 您没有正确使用I / O缓冲。不要进行太多系统调用。目前,您正在拨打约一百万次。 首先在Py

  • 问题内容: 我已经介绍了一些我使用cProfile继承的旧代码。我已经进行了很多更改,这些更改有所帮助(例如使用simplejson的C扩展!)。 基本上,此脚本将数据从一个系统导出到ASCII固定宽度文件。每行都是一条记录,并且具有许多值。每行是7158个字符,并包含大量空格。总记录数为150万条记录。每行一次生成一次,并需要一段时间(每秒5-10行)。 生成每一行时,将尽可能简单地将其写入磁盘

  • 问题内容: 如标题所示,我正在寻找最快的方式将整数数组写入文件。数组的大小将有所不同,并且实际上包含2500至25000000 int之间的任何位置。 这是我目前正在使用的代码: 鉴于DataOutputStream有一种写入字节数组的方法,我已经尝试将int数组转换为字节数组,如下所示: 像这样: 两者似乎都使速度略有提高,约为5%。我没有对它们进行足够严格的测试以确认这一点。 是否有任何技术可

  • 问题内容: 我必须在text [csv]文件中写入大量数据。我使用BufferedWriter写入数据,并且花费了大约40秒的时间来写入174 mb的数据。这是Java可以提供的最快速度吗? 注意:这40秒还包括从结果集中迭代和获取记录的时间。:) 174 mb用于结果集中的400000行。 问题答案: 你可以尝试删除BufferedWriter并直接使用FileWriter。在现代系统上,无论如

  • 问题内容: 我一直在寻找最快的方法来用有限的内存(大约64MB)在Java中再次读写大文件(0.5-1 GB),这是最快的方法。文件中的每一行代表一条记录,因此我需要逐行获取它们。该文件是普通文本文件。 我尝试了BufferedReader和BufferedWriter,但这似乎不是最好的选择。读写大小为0.5 GB的文件大约需要35秒钟,仅进行读写操作而不进行任何处理。我认为这里是写作的瓶颈,因

  • 问题内容: 将File写入javax.servlet.ServletOutputStream的最有效方法是什么? 编辑: 如果使用NIO会更有效吗? 问题答案: 哪里是的FileInputStream和是。 IOUtils是Apache Commons中 Commons IO 模块的实用程序。