读取QueueFile磁带时出现EOFException

时间:2014-04-04 11:45:18

标签: java android exception square-tape

我正在使用Square的Tape库将数据上传排队到服务器。

队列以JSON格式存储在File中。当应用程序启动时,我启动队列并开始上传(例如,如果在Wifi上)但是在用户的某些设备上,我看到EOFException带有'null'消息(登录崩溃)。

从现有文件创建FileObjectQueue对象时发生错误 - 从调试信息收集实际文件大约为1MB。

任何想法导致这种情况或如何预防? - 也许我需要清理我的java.io。

编辑:使用Tape v1.2.1

Caused by: java.io.EOFException
at java.io.RandomAccessFile.readFully(RandomAccessFile.java:419)
at java.io.RandomAccessFile.readInt(RandomAccessFile.java:439)
at com.squareup.tape.QueueFile.readElement(:182)
at com.squareup.tape.QueueFile.readHeader(:162)
at com.squareup.tape.QueueFile.(:110)
at com.squareup.tape.FileObjectQueue.(:35)
at com.myapp.queue.MyUploadTaskQueue.create(:125)

已更新 - 自升级到1.2.2后也看到此错误

Caused by: java.io.IOException: File is corrupt; length stored in header is 0.
       at com.squareup.tape.QueueFile.readHeader(:165)
       at com.squareup.tape.QueueFile.<init>(:117)
       at com.squareup.tape.FileObjectQueue.<init>(:35)

1 个答案:

答案 0 :(得分:1)

EOFException显示已到达文件结尾,即没有更多字节要读取。此异常只是另一种表示没有其他方法可读的方法,而其他方法返回一个值,如-1。正如您在错误堆栈跟踪中看到的那样,抛出异常的方法是读取方法; java.io.RandomAccessFile.readFully(RandomAccessFile.java:419)com.squareup.tape.QueueFile.readHeader(:165)。因此,它不能被“阻止”,除非你没有读取所有字节(你通常想要的),只是像这样抓住它; catch(EOFException e) { /* ignore */ } :) https://docs.oracle.com/javase/7/docs/api/java/io/EOFException.html