code

QueueFile 테이프를 읽을 때 EOFException 발생

codestyles 2020. 12. 26. 10:05
반응형

QueueFile 테이프를 읽을 때 EOFException 발생


Square의 Tape 라이브러리를 사용 하여 서버에 대한 데이터 업로드를 대기열에 넣습니다.

큐는 JSON 형식의 파일에 저장됩니다. 앱이 시작되면 대기열을 초기화하고 업로드를 시작합니다 (예 : Wi-Fi에있는 경우). 그러나 사용자의 일부 장치 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)

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

참조 URL : https://stackoverflow.com/questions/22861931/eofexception-when-reading-queuefile-tape

반응형