我需要用Java解析一个长文件并将结果输出到另一个文件。
由于我需要平均几个项目,并且我需要解析文件以找到它们,我需要在内存中存储当前的平均项目,然后将其输出到磁盘上的结果文件。
这种方法是否正常,或者我会在一百万项文件中表现不佳?
更新:这里的要点是每个输出项都可以在计算时随时更新,因为我可能会在开头和结尾平均一个项目。所以我无法释放它,并且我想是在磁盘上写的。
感谢
答案 0 :(得分:0)
输出是否适合RAM,比如
Map<MyItem, Integer>
(如果您的平均值适合整数)?
如果答案是肯定的,那么最快的解决方案是在源文件遍历期间将其保留在内存中,然后写入输出文件。
如果答案为否,则必须对问题进行分区并创建中间结果并将其存储到磁盘,然后必须合并中间结果以创建最终结果。
如果您必须对问题进行分区,请使用一些数字提出新问题,因为答案实际上取决于上下文......
答案 1 :(得分:0)
查看flatpack它具有LargeDataSet实现,用于处理内存较少的大文件。
答案 2 :(得分:0)
另一个解决方案可能是做2次传递:第一次传递计算(并保持)内存中的变化值,第二次传递创建输出。