从上一个问题开始,我使用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读取前四个字节是否有所不同?