读取队列文件磁带时的 EOF 异常

2022-08-31 17:04:37

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

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

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

任何想法是什么导致这种情况或如何防止它?- 也许我需要在我的 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)

答案 1

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


答案 2