读取ePub文件的内容时抛出EOFException

时间:2017-04-07 10:50:54

标签: android epub epublib

我正在尝试使用库epublib读取ePub文件的内容,而example证明了这一点。

对我来说,从输入流

加载图书时会抛出异常
// Load Book from inputStream
Book book = (new EpubReader()).readEpub(epubInputStream);

不确定为什么代码不起作用并且抛出了异常?它适用于StackOverflow的其他用户。

下面分享了完整堆栈跟踪:

W/System.err: java.io.EOFException
W/System.err:     at libcore.io.Streams.readFully(Streams.java:83)
W/System.err:     at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:235)
W/System.err:     at nl.siegmann.epublib.epub.EpubReader.readResources(EpubReader.java:184)
W/System.err:     at nl.siegmann.epublib.epub.EpubReader.readEpub(EpubReader.java:94)
W/System.err:     at nl.siegmann.epublib.epub.EpubReader.readEpub(EpubReader.java:53)
W/System.err:     at nl.siegmann.epublib.epub.EpubReader.readEpub(EpubReader.java:37)
W/System.err:     at com.blogspot.gsrikar.ePubViewerActivity.readEPubContents(ePubViewerActivity.java:102)
W/System.err:     at com.blogspot.gsrikar.ePubViewerActivity.onCreate(ePubViewerActivity.java:88)
W/System.err:     at android.app.Activity.performCreate(Activity.java:6904)
W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3266)
W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
W/System.err:     at android.app.ActivityThread.-wrap17(ActivityThread.java)
W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err:     at android.os.Looper.loop(Looper.java:148)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7325)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

2 个答案:

答案 0 :(得分:2)

抛出

EOFException

  • 如果中没有数据,但您正在尝试阅读..例如,阅读 链流的方法,如DataInputStream,ObjectInputStream 如果他们试图从FileInputStream中读取,则抛出 EOFException 但FileInputStream为空或

  • 如果格式不匹配...例如,如果int存在且你是 使用DataInputStream的readFloat()

答案 1 :(得分:0)

在将其传递给readEpub之前,您应该尝试调用以下方法。 Java Doc链接:http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#available()

//assuming the above variables are already declared.
if(epubInputStream.available() > 0)
    Book book = (new EpubReader()).readEpub(epubInputStream);
else
    System.out.println("no data to read");