8

我正在尝试使用库 epublib 读取 ePub 文件的内容,此示例演示了这一点。

对我来说,从输入流加载图书时会引发异常

// 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)
4

2 回答 2

3

抛出EOFException :

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

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

于 2017-04-14T17:59:11.277 回答
0

在将其传递给 readEpub 之前,您应该尝试调用以下方法。Java 文档链接: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");
于 2017-04-16T14:59:33.447 回答