在我的应用程序中,我正在阅读 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)
答案 0 :(得分:2)
您似乎一次加载整个文件,这可能超过了您的应用程序内存限制。
尝试将文件的块加载到数组或类似的东西中,并处理不需要的块。你当然不需要一次使用整个文件,因为你无法在屏幕上显示所有文件。另一方面,一次加载页面应该足以达到最合理的目的(例如,在屏幕上显示)。
即使你正在进行更具异国情调的东西,比如语言分析,你也可以加载更小的文件块并一次分析一个。
您正在使用的epub库必须能够为您提供比整个文件更易于管理的内容。这个readEpubLazy
方法就是出于这个目的。