0

フラットバッファファイルを読み取るためのコードは次のとおりです。私はいつも EOF 例外を受け取ります。その例外を取り除くにはどうすればよいですか...

  File file = new   File("/Users/samarnath/RmsOne/CreateFlatBuffer/src/com/rms/objects/SingleCoverRiskPolicy.fb");
    RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
    int size;
    byte[] data = new byte[0];

    while ((randomAccessFile.read(data, 0, 0)) != -1)
    {
        try {
            size = randomAccessFile.readInt();
            data = new byte[size];
            randomAccessFile.read(data, 0, size);

            ByteBuffer bb = ByteBuffer.wrap(data);
            SingleCoverRiskPolicy singleCoverRiskPolicy = SingleCoverRiskPolicy.getRootAsSingleCoverRiskPolicy(bb);
            System.out.println(singleCoverRiskPolicy.id());

        } catch (EOFException e) {

            randomAccessFile.close();
            e.printStackTrace();
        }
    }
4

1 に答える 1

1

私はあなたのコードに混乱しています...最初に、byte[] data = new byte[0];後で上書きするので役に立ちません。次に、new RandomAccessFile()try-catch の外側を作成しています。0第三に、バイトの長さをに渡しているようですrandomAccessFile.read(buffer, offset, length)。これらのいずれかに意味がある場合は、明確にするためにコメントしてください。

Java Test ファイルを見ると、参照できる例があります: https://github.com/google/flatbuffers/blob/master/tests/JavaTest.java#L30

次のようなことを試してください:

*注: このコードはコンパイルしていません。ただし、問題に対処するには十分に類似している必要があります。

File file = new File("/Users/samarnath/RmsOne/CreateFlatBuffer/src/com/rms/objects/SingleCoverRiskPolicy.fb");
RandomAccessFile randomAccessFile = null;
byte[] data = null;

try {
    randomAccessFile = new RandomAccessFile(file, "r");
    data = new byte[(int)randomAccessFile.length()];
    randomAccessFile.readFully(data);
    randomAccessFile.close();
} catch(java.lang.IllegalArgumentException e) {
    e.printStackTrace();
} catch(java.io.IOException e) {
    e.printStackTrace();
} catch(java.io.FileNotFoundException e) {
    e.printStackTrace()
} catch(java.lang.SecurityException e) {
    e.printStackTrace()
} // Note: You can clean up these exceptions as needed (depending on your Java version).

// You're done reading it, now convert to a ByteBuffer and begin using.
ByteBuffer bb = ByteBuffer.wrap(data);
SingleCoverRiskPolicy singleCoverRiskPolicy = SingleCoverRiskPolicy.getRootAsSingleCoverRiskPolicy(bb);
System.out.println(singleCoverRiskPolicy.id());
于 2016-01-20T00:42:00.987 に答える