我有代码:

junk.writeUTF("Jim");
junk.writeInt(9304029);
junk.writeUTF("England");

junk.writeUTF("Bob");
junk.writeInt(99291933);
junk.writeUTF("Canada");

junk.seek(12);
String name = junk.readUTF();
int number = junk.readInt();
String city = junk.readUTF();


当我运行它时,我收到错误消息说它为空。我知道为什么会这样,但是我如何知道要寻找哪个字节,以便我可以读取Bob的数据? seek(12)为空。

最佳答案

int不是2字节,而是4。writeUTF写入2字节长度的前缀,因此总长度应为18。

如果我们考虑每个数据的偏移量:

            Offset
UTF length  0
Jim         2
9304029     5
UTF length  9
England     11


传入12时,它将尝试使用ng作为长度读取UTF字符串,长度为28263,显然比文件长一点。

关于java - RandomAccessFile:获取Java.io.EOFException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19415965/

10-09 07:29