gpt4 book ai didi

java - 以人类可读的格式将巨大的 ArrayList 写入文件

转载 作者:行者123 更新时间:2023-12-01 06:42:43 25 4
gpt4 key购买 nike

我有一个程序可以处理来自传感器系统的大量传感器数据。我目前正在考虑将程序的输出写入文本文件,以便我可以检查程序是否正确处理它。

现在我正在 ArrayList 之前写入一些标识符,然后使用 ArrayList.toString() 将 ArrayList 写入文件。

lineToWrite = identifer1 + ";" + identifier2 + ";" + ArrayList.toString()

输出文件总共包含 21 行,ArrayList 的项目数量从 100 到 400.000 不等。使用 toString() 方法使得我通常使用的任何文件编辑程序都无法打开文件并检查它们。

我想对 ArrayList 中的项目进行一些小处理:

String lineToWrite = "";

String arrayListString = "\n";
for(String s : sensorLine){
arrayListString += "\t" + s + "\n";
}

lineToWrite = identifer1 + ";" + identifier2 + ";" + arrayListString;

但对于某些足够大的 ArrayList 来说,这似乎需要很长时间。有谁有更好/更快的方法来执行此操作或知道一个好的文件查看程序?

我用过以下的,没有出现以下问题:

  • Notepad++ -> 打开缓慢,完全打开后出现延迟
  • Sublime Text 3 -> 打开速度非常慢!

作为传感器数据的一个小旁注:我总共有 230 万个传感器输入。

编辑1:

为了扩展问题,我可能必须补充一点,将巨大的数组拆分为单个字符串的部分被证明是一个问题。该程序在数组上迭代的速度非常慢,因为它只是在每次遍历时增加 arrayListString 的大小,我猜这会占用大量内存/处理能力。

编辑2:

至于写入方法本身,我使用的是 BufferedWriter(),其中包含实际方法变量的占位符:

output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename, toAppend), "UTF-8"));

对于我正在使用的实际写作:

output.append(line)
output.flush();

最佳答案

问题是您正在将一个非常大的字符串组装到内存中,然后一次将其全部写入,并启动大量字符串操作(导致为每个字符串分配内存)。

相反,请考虑使用 Stream。使用 Writer,您可以迭代数组并追加到文件中,速度会快得多。

这是一个很好的基础教程: http://www.tutorialspoint.com/java/java_files_io.htm

关于编辑器问题,大多数编辑器要么将整个文件加载到内存中,要么以行或字节 block 的形式加载。如果您的行数很大,您可能需要重新审视您的格式。

关于java - 以人类可读的格式将巨大的 ArrayList 写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39595679/

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