Подтвердить что ты не робот

EOFException при чтении ленты QueueFile

Я использую библиотеку Square Tape для очереди загрузки данных на сервер.

Очередь сохраняется в файле в формате JSON. Когда приложение запускается, я запускаю очередь и начинаю загрузку (например, если на Wifi). Однако на некоторых устройствах у пользователей я вижу EOFException с сообщением 'null' (зарегистрировано в crashlytics).

Ошибка при создании объекта FileObjectQueue из существующего файла - из сбора информации об отладке фактический файл составляет ~ 1 МБ.

Любые идеи, что вызывает это или как предотвратить это? - Возможно, мне нужно пылесосить мой 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)
4b9b3361

Ответ 1

EOFException показывает, что End Of File достигнут, то есть больше нет байтов для чтения. Это исключение - еще один способ сообщить, что читать больше нечего, тогда как другие методы возвращают значение, например -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