gpt4 book ai didi

Java - 读取文件并加载到 HashMap - 如何减少时间?

转载 作者:行者123 更新时间:2023-12-02 05:08:50 26 4
gpt4 key购买 nike

我正在读取大小约为 20 MB 的文件,其中包含大约 500,000 条记录。我将记录加载到 HashMap 中,其中特定字段作为键,另一个字段作为值。这个Map的Key-values会在后续的处理中用到。

仅仅读取文件的时间可以忽略不计。但是,解析字段并将其加载到 HashMap 中似乎需要几个小时。代码看起来有点像这样,

InputStream in = new FileInputStream(new File(file));
br = new BufferedReader(new InputStreamReader(in), 102400);
if (br != null) {
for (String record; (record = br.readLine()) != null;) {
sb = new StringBuilder(record);

map.put(sb.substring(findStartIndex(fieldName1),findEndIndex(fieldName1)), sb.substring(findStartIndex(fieldName2),findEndIndex(fieldName2)));

}
}

其中 findStartIndex() 和 findEndIndex() 是解析记录格式 xml 并查找字段的开始和结束索引的方法。

我需要对一堆文件重复此过程。建议我以某种方式减少运行时间。任何帮助表示赞赏。谢谢。

编辑:我实现了 findStartindex 和 findEndindex 如下,

输入是带有字段名称和索引值的 xml。我使用 SaxParser、getters 和 setters 来查找开始和结束的值。

最佳答案

使用 BufferedReader 每秒可以读取数百万行。毫无疑问,时间正在进行未显示的 XML 解析。看来您没有使用正确的解析器,但显然您只是在 XML 上进行字符串搜索,两次从字符串的开头开始,这是二次的,或者将每行解析为 XML 四次,这是更差。不要那样做。使用 XPath 来查找您的字段,它要快得多,或者是正确实现的 SAX 解析器监听器。

当您已经拥有该行本身时,我认为没有任何充分的理由为每行创建一个新的 StringBuilder

NB br 在您测试时不可能为 null。

关于Java - 读取文件并加载到 HashMap - 如何减少时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27519322/

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