我正在构建一个简单的 java 应用程序,该应用程序涉及从 csv 文件中读取信息。csv 文件中的信息采用以下形式:
"ID","Description"
"AB","Some sort of information for AB"
"AC","Some sort of information for AC"
我需要让用户在按 ID 排序的控制台中打印出描述、ID 或两者。最简单的解决方案是使用 CSV 库(例如 opencsv)解析文件,并将这些字符串放入 TreeMap,然后打印 TreeMap 的内容。TreeMap 中的键是 ID,值是描述。
但是 CSV 文件可能很大。它可能是 5 GB,将 5 GB 的字符串加载到 TreeMap 会导致内存不足错误。为了处理大文件,我可以使用外部合并排序对文件进行排序。有一次,我得到了排序的文件,我可以通过简单地读取文件将文件的内容打印到控制台中。
外部合并排序肯定比将文件内容加载到 TreeMap 中要慢得多。我正在考虑检测文件大小。如果文件大小超过可用内存,那么我将使用外部合并排序。否则,我会将文件的内容加载到 TreeMap 中。
但是,这意味着将有两个单独的代码块执行 2 种不同的排序。因此增加了需要维护的代码量。如果您要编写此应用程序,您是否会考虑编写 2 个分开的代码来分别处理一个小的 csv 文件和一个大的 csv 文件。或者您是否只使用外部合并排序对文件进行排序而不管文件大小?
还是有这种方法的替代方法?
谢谢你。