0

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

(这只是伪代码)

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
4

3 回答 3

2

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

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

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

通常,您应该尝试将数据写入适合磁盘块大小的块。

于 2013-01-18T10:16:37.737 回答
1

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

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

于 2013-01-18T10:23:32.250 回答
0

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

于 2013-01-18T10:10:30.287 回答