0

尝试使用hashtable大数据时遇到问题。我有一个包含超过 111000 条记录的文本文件,当它达到 75000 条时,抛出了内存不足异常,那么有人对此有任何解决方案吗?

问题发生在以下行:

while ((text = reader.readLine())!= null);

并且由于 java.lang.String <init>内部readLine(),但我认为问题来自hashtable太大而无法保存存储数据。
我在我的xperia Neo上对其进行了测试,但它失败了,尽管它在另一台三星设备上运行得很好。

SoundUnit我保留的对象hashtable具有以下结构:

private String filename; 
private int start; 
private int end;

就在 SoundUnit 对象内的 3 个字段之上。

这是我用来从文本中读取数据以存储的一段代码hashtable

       reader = new BufferedReader(new InputStreamReader(new FileInputStream(unitSelectionFile),  "UTF-8"));
       String text=null;

       do {

                if (text.length() != 0) {
                    if (mainHash.get(text)==null)
                        mainHash.put(key, soundUnit);
                }


        } while ((text = reader.readLine())!= null);
4

2 回答 2

0

是的,很可能哈希表太大了。我在 Galaxy Nexus 上进行了测试,这是一款相当新的手机,它在 230k 个条目后内存不足,唯一的键和值大约 8 个字符长。我建议将您的数据放入数据库中。

您的阅读器应该不是问题,因为BufferedReader只使用少量内存。

于 2012-06-18T08:46:47.477 回答
0

您应该从响应中获取 InputStream 并将其传递给任何 xml 处理程序以进行解析。这应该可以解决问题,因为通过这样做,您的 xml 将在您获取输入流时动态解析。

于 2012-06-18T08:47:28.740 回答