【问题标题】:Repeated disk writes重复磁盘写入
【发布时间】:2013-01-02 00:06:06
【问题描述】:

我需要将单词列表写入文件,然后将文件保存在磁盘上。以下两种方法中的一种是否比另一种更好?第二个显然使用更多的主内存,但速度有区别吗?

(这只是伪代码)

for i = 0 to i = n:
    word = generateWord();
    FileWriter.println(word);
end loop

String [] listOfWords = new List
for i = 0 to i = n:
    word = generateWord();
    listOfWords.add(word)
end loop
for i = 0 to n:
    FileWriter.println(listOfWords[i]);
end loop

【问题讨论】:

  • 没有太大区别。这取决于您是否重复使用单词列表。

标签: java c++ file-io disk


【解决方案1】:

您展示的这两种方法在磁盘使用效率方面完全一样。

在考虑磁盘写入速度时,您必须始终考虑您使用的是哪种写入器对象。有许多类型的写入器对象,在实际磁盘写入时,它们中的每一种都可能表现不同。

如果您正在使用的对象是那些写入您告诉它的确切数据的对象之一,那么您的写入方式非常低效。您应该考虑切换到另一个写入器(例如 BufferedWriter)或在写入之前构建更长的字符串。

一般来说,您应该尝试将数据写入适合磁盘块大小的块。

【讨论】:

    【解决方案2】:

    在您的代码和磁盘之间,您有一个类似于以下内容的堆栈:Java 库代码、虚拟机运行时、C 运行时库、操作系统文件缓存/虚拟内存子系统、操作系统 I/O 调度程序、设备驱动程序和物理磁盘固件。

    只要做最简单的事情,除非分析显示有问题。其中几个层已经被调整为处理缓冲、批处理和调度顺序写入,因为它们是如此常见的用例。

    【讨论】:

      【解决方案3】:

      FileWriters 的角度来看,您在两个示例中都在做完全相同的事情,因此显然文件 I/O 没有任何区别。而且,正如您所说,第一个的空间复杂度是 O(1),而第二个的空间复杂度是 O(N)。

      【讨论】:

        猜你喜欢
        • 2020-06-01
        • 2011-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-06
        • 2021-08-18
        • 2012-10-23
        相关资源
        最近更新 更多