gpt4 book ai didi

java - 从文件读取数组或向文件写入数组的最快方法?

转载 作者:行者123 更新时间:2023-12-02 00:12:54 25 4
gpt4 key购买 nike

我知道这里和网上有几个类似的线程,但我猜我似乎做错了什么。我的任务很简单 - 将一个大整数数组(int [] 或 ArrayList 或您认为最好的)写入(然后读取)到文件中。越快越好。我的具体数组中有大约 450 万个整数,当前时间例如(以毫秒为单位):

  • 生成特里树:14851.13071
  • 正在生成数组:2237.4661619999997
  • 正在保存数组:89250.167617
  • 正在加载数组:114908.08185799999

这是 Not Acceptable ,我想时间应该要短得多。我究竟做错了什么?我不需要地球上最快的方法,但将这些时间控制在大约 5 - 15 秒(欢迎减少,但不是强制性的)是我的目标。

我当前的代码:

long start = System.nanoTime();

Node trie = dawg.generateTrie("dict.txt");
long afterGeneratingTrie = System.nanoTime();
ArrayList<Integer> array = dawg.generateArray(trie);
long afterGeneratingArray = System.nanoTime();

try
{
new ObjectOutputStream(new FileOutputStream("test.txt")).writeObject(array);
}
catch (Exception e)
{
Logger.getLogger(DawgTester.class.getName()).log(Level.SEVERE, null, e);
}
long afterSavingArray = System.nanoTime();

ArrayList<Integer> read = new ArrayList<Integer>();
try
{
read = (ArrayList)new ObjectInputStream(new FileInputStream("test.txt")).readObject();
}
catch (Exception e)
{
Logger.getLogger(DawgTester.class.getName()).log(Level.SEVERE, null, e);
}
long afterLoadingArray = System.nanoTime();

System.out.println("Generating trie: " + 0.000001 * (afterGeneratingTrie - start));
System.out.println("Generating array: " + 0.000001 * (afterGeneratingArray - afterGeneratingTrie));
System.out.println("Saving array: " + 0.000001 * (afterSavingArray - afterGeneratingArray));
System.out.println("Loading array: " + 0.000001 * (afterLoadingArray - afterSavingArray));

最佳答案

不要使用java序列化。它非常强大和健壮,但不是特别快(或紧凑)。使用简单的 DataOutputStream 并调用 writeInt()。 (确保在 DataOutputStreamFileOutputStream 之间使用 BufferedOutputStream)。

如果您想在读取时预先调整数组的大小,请将第一个 int 写入为数组长度。

关于java - 从文件读取数组或向文件写入数组的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12375774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com