java - Android 内存不足错误,HashMap 中出现 20MB 文本文件

标签 java android out-of-memory

(Android 初学者问题:) 我正在将 25MB 同义词库文本文件加载到 HashMap 中,但出现内存不足致命异常。我研究了这个网站,寻找其他方法来做到这一点,但我仍然不确定。 将文本文件拆分为多个较小的文件(例如 26 个,每个字母一个),然后根据程序需要将它们从文本文件读取到 HashMap 是否明智?有更好的方法吗? 该应用程序旨在显示用户输入的单词的所有同义词。

12-23 13:04:44.336: E/AndroidRuntime(9865): FATAL EXCEPTION: main
12-23 13:04:44.336: E/AndroidRuntime(9865): Process: com.example.dictfromtextfile, PID: 9865
12-23 13:04:44.336: E/AndroidRuntime(9865): java.lang.OutOfMemoryError: Failed to allocate a 6532 byte allocation with 4262 free bytes and 4KB until OOM
12-23 13:04:44.336: E/AndroidRuntime(9865):     at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95

最佳答案

强烈不建议将整个文件立即加载到内存中,并且会引发 OutOfMemoryException 错误,具体取决于您使用的设备。您可以使用 SQLite 数据库来存储数据并对其执行数据库操作以搜索、插入或删除数据。

如果您希望将数据存储在文本文件中,可以使用 BufferedReader 使用 readLine() 方法逐行读取文件(仅在需要时将每一行加载到内存中)。然后,您可以用自己的类包装它,以启用您需要的所有功能,例如搜索。

关于java - Android 内存不足错误,HashMap 中出现 20MB 文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27621597/

相关文章:

java - `Thread-` 后面的数字是多少?

java - Hibernate - 是否需要在父实体中包含 Set 和 OneToMany 注释?

java - Spring Cloud Stream @ServiceActivator 在异常时不向 errorChannel 发送消息

java - 在 Java 中验证 SSH 主机 key 格式

android swipelist 缺少属性

python - 使用 Django 的 Python 脚本中的明显内存泄漏

java - 使用 RMI 将 Java Vector 从服务器返回到客户端

java.lang.IllegalStateException : Default FirebaseApp is not initialized in this process

java - 在一个语句中一次向 HashMap 添加多个条目

java - 为什么这段代码抛出 StackOverflowException 而不是 OutOfMemoryException?