ここにあるstackoverflowの他の投稿ですでに説明されているように、EOFExceptionは、ストリームの終わりに予期せず到達したときに発生します。バイト配列を長い数値に変換するメソッドがあります。このバイト配列は、CのデータベースからJavaバインディングを介して取得したuint64_t番号です。uint64_tと長い数値(符号付きビット)へのキャストの問題を知っています。
これが私の方法です:
public long castByteArrayToLong(byte[] bb){
ByteArrayInputStream stream = new ByteArrayInputStream(bb);
DataInputStream di = new DataInputStream(stream);
long number=-2;
try {
number = di.readLong();
} catch (Exception e) {
e.printStackTrace();
}
return number;
}
このメソッドは時々(!)この例外をスローします:
java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:180)
at java.io.DataInputStream.readLong(DataInputStream.java:399)
at TreeManager.castByteArrayToLong(TreeManager.java:191)
at TreeManager.test2(TreeManager.java:442)
at TreeManager.main(TreeManager.java:72)
私が理解していないのは、なぜその例外を取得できるのかということです。バイト配列の長さを自分で指定しませんでしたが、バイト配列をByteArrayInputStreamに渡すだけなので、理論的にはそのような例外は発生しないはずです。
(解決策が明らかにある場合は、私を許してください)