2014-04-04 52 views
57

我正在使用Square的Tape庫將數據上傳到服務器。閱讀QueueFile磁帶時出現EOFException

隊列以JSON格式存儲在File中。當應用程序啓動時,我啓動隊列並開始上傳(即,如果使用Wifi)但是在用戶的某些設備上,我看到EOFException'null'消息(登錄crashlytics)。

從現有文件創建FileObjectQueue對象時發生錯誤 - 從調試信息收集實際文件爲〜1MB。

任何想法是什麼導致這種情況或如何防止它? - 也許我需要對我的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) 
+0

您使用的是什麼版本的庫? –

+0

嘿傑克,使用磁帶v1.2.1(更新問題),但只是檢查更改日誌,我看到可能是一個相關的修復「防止腐敗時,擴大一個完全飽和的隊列」,所以要試試1.2.2。 thx – scottyab

+0

很酷。這正是我問的原因! –

回答

1

的EOFException類表明,最終的文件已經達到了,也就是說,沒有更多的字節要讀取。這個異常只是另一種表示沒有更多需要讀取的方式,而其他方法則返回一個值,如-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

+0

通常是的,但Square的API指出,如果隊列爲空,peek方法將返回null並且不會引發異常。我們可能期望該庫將在內部處理EOF異常。所以我不認爲EOF異常在這裏是正常的。 – Mikhail

相關問題