java - 读取 QueueFile 磁带时出现 EOFException

标签 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)

最佳答案

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

关于java - 读取 QueueFile 磁带时出现 EOFException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22861931/

相关文章:

java - 存储大量图像数据库或文件系统

Android可绘制资源ID冲突?

java - Android下载文件时出现"Unfortunately, ... has stopped"

android - 如何使用定义的填充对齐 MaterialButton 文本旁边的图标?

java - 在 Java 中,如何将 Exception 强制为 "bubble up"?

java - 我可以将 JavaScript 与 Java SDK 一起使用吗?

java - 从servlet请求java获取客户端IP地址

java - 使用 hough 进行瞳孔检测的最佳参数? java opencv

android - 如何捕获无法找到 com.facebook.katana.provider.PlatformProvider 错误的提供商信息

exception - services.AddDatabaseDeveloperPageExceptionFilter();错误代码 : CS1061