java - new - EOFException al leer la cinta QueueFile
new icon java (1)
Estoy usando la biblioteca Square''s Tape para poner en cola las cargas de datos al servidor.
La cola se almacena en Archivo en formato JSON. Cuando se inicia la aplicación, inicio la cola y empiezo a cargar (es decir, si estoy EOFException
a Wifi). Sin embargo, en algunos dispositivos de usuarios veo EOFException
con ''null''
mensaje ''null''
(crashlytics registrado).
El error se produce al crear un objeto FileObjectQueue
partir de un archivo existente: a partir de la información de depuración, el archivo real es ~ 1MB.
¿Alguna idea de lo que está causando esto o cómo prevenirlo? - Tal vez necesito quitarle polvo a mi java.io.
Editar: usando la cinta 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)
Actualizado : también aparece este error desde la actualización a 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)
La EOFException muestra que se ha alcanzado el Fin del archivo, es decir, no hay más bytes para leer. Esta excepción es solo otra forma de indicar que no hay nada más que leer, mientras que otros métodos devuelven un valor, como -1. Como puede ver en su rastro de pila de error, los métodos que arrojan la excepción son métodos de lectura; java.io.RandomAccessFile.readFully(RandomAccessFile.java:419)
y com.squareup.tape.QueueFile.readHeader(:165)
. Como tal, no puede ser "prevenido" a menos que no lea todos los bytes (lo que normalmente desea), simplemente tóquelo como tal; catch(EOFException e) { /* ignore */ }
:) https://docs.oracle.com/javase/7/docs/api/java/io/EOFException.html