-1

在我的应用程序epub中,当大尺寸 epub 正在读取文件时,我正在读取文件,任何人都可以帮助我解决这个问题:

错误:

02-01 09:25:06.814: E/AndroidRuntime(26698): FATAL EXCEPTION: Background
02-01 09:25:06.814: E/AndroidRuntime(26698): java.lang.OutOfMemoryError
02-01 09:25:06.814: E/AndroidRuntime(26698):    at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:93)
02-01 09:25:06.814: E/AndroidRuntime(26698):    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:218)
02-01 09:25:06.814: E/AndroidRuntime(26698):    at nl.siegmann.epublib.util.IOUtil.copy(IOUtil.java:79)
02-01 09:25:06.814: E/AndroidRuntime(26698):    at nl.siegmann.epublib.util.IOUtil.toByteArray(IOUtil.java:43)
02-01 09:25:06.814: E/AndroidRuntime(26698):    at nl.siegmann.epublib.domain.Resource.<init>(Resource.java:114)
02-01 09:25:06.814: E/AndroidRuntime(26698):    at nl.siegmann.epublib.util.ResourceUtil.createResource(ResourceUtil.java:64)
02-01 09:25:06.814: E/AndroidRuntime(26698):    at nl.siegmann.epublib.epub.EpubReader.readResources(EpubReader.java:188)
02-01 09:25:06.814: E/AndroidRuntime(26698):    at nl.siegmann.epublib.epub.EpubReader.readEpub(EpubReader.java:94)
02-01 09:25:06.814: E/AndroidRuntime(26698):    at nl.siegmann.epublib.epub.EpubReader.readEpub(EpubReader.java:53)
02-01 09:25:06.814: E/AndroidRuntime(26698):    at nl.siegmann.epublib.epub.EpubReader.readEpub(EpubReader.java:37)
02-01 09:25:06.814: E/AndroidRuntime(26698):    at com.fastreader.TextReader.StringSpilitFunction(TextReader.java:362)
02-01 09:25:06.814: E/AndroidRuntime(26698):    at com.fastreader.TextReader$4$1$1.run(TextReader.java:126)
02-01 09:25:06.814: E/AndroidRuntime(26698):    at java.lang.Thread.run(Thread.java:1096)
4

1 回答 1

2

您似乎一次加载整个文件,这可能超过了您的应用程序内存限制。

尝试将文件的块加载到数组或类似的东西中,然后处理不需要的块。您肯定不需要一次使用整个文件,因为您无法将其全部显示在屏幕上。另一方面,一次加载一个页面对于大多数合理的目的(例如,在屏幕上显示它)应该足够了。

即使您从事更奇特的事情,例如语言分析,您也可以加载更小的文件块并一次分析它们。

您使用的 epub 库必须能够为您提供比整个文件更易于管理的内容。为了这个确切的目的,有这种readEpubLazy方法。

于 2014-01-26T20:15:38.333 回答