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)
Ответы
Ответ 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