读取QueueFile磁带时发生EOFException

我正在使用Square的磁带库将数据上传到服务器。

队列以JSON格式存储在File中。 当应用程序启动时,我启动队列,并开始上传(即如果在Wifi上)然而,在用户的一些设备上,我看到EOFException 'null'消息(logincrashlytics)。

从现有文件创buildFileObjectQueue对象时发生错误 – 从debugging信息收集实际文件是〜1MB。

任何想法是什么导致这个或如何防止它? – 也许我需要在我的java.io上灰飞烟灭。

编辑:使用磁带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) 

EOFException表明已到达文件结尾,也就是说没有更多的字节要读取。 这个exception只是另一种表示没有更多内容可读的方式,而其他方法则返回一个值,如-1。 正如你在错误堆栈跟踪中看到的,抛出exception的方法是读取方法; 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

Interesting Posts