如何使用Java从文件中读取平面缓冲区系列

问题描述 投票:0回答:1

[从上一个问题开始,我使用Python将一系列带有大小前缀的Flatbuffer数据写入文件。在Python中,我可以通过读取4个字节来获取下一个数据片段的大小,然后读入那么多字节以获取数据并将其重复直到EOF来获取数据。没什么大不了的。现在,我正尝试用Java重新读取该数据。我在一个类中有一个方法来加载数据文件,获取前四个字节,将其解码为整数,然后使用该方法读取数据,因为前四个字节应为数据大小。这是一个例子:

public class Flatbuffer_IO{
    File inFile;
    RandomAccessFile f;



    public void load_data_file(String file) throws IOException{
        inFile = new File(file);
        f = new RandomAccessFile(inFile, "r");      
        byte[] prefix = new byte[4];
        f.readFully(prefix);
        int dataSize = ByteBufferUtil.getSizePrefix(ByteBuffer.wrap(prefix));
        byte data[] = new byte[dataSize];
        f.readFully(data);          
        ByteBuffer buf = ByteBuffer.wrap(data);     
        .
        .
        .

发生的情况是dataSize最终是一个非常大的数字,大于整个文件的大小,更不用说一个数据了。我将readFully()更改为read()并查看了正在读取的数据的大小,它读取了整个文件,减去了4个字节,因为我已经抓取了该数据大小。我使用完全相同的文件返回Python,我的dataSize是正确的,因为它只是下一个数据段的大小。 Java读取前四个字节是否有所不同?

java file-io flatbuffers
1个回答
0
投票
int sizePrefix = ByteBufferUtil.getSizePrefix(buf);
int correctSize = buf.order() == ByteOrder.BIG_ENDIAN ?
                    Integer.reverseBytes(sizePrefix) : sizePrefix;
© www.soinside.com 2019 - 2024. All rights reserved.