[从上一个问题开始,我使用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读取前四个字节是否有所不同?
int sizePrefix = ByteBufferUtil.getSizePrefix(buf);
int correctSize = buf.order() == ByteOrder.BIG_ENDIAN ?
Integer.reverseBytes(sizePrefix) : sizePrefix;