RandomAccessFile:获取Java.io.EOFException

时间:2013-10-16 23:56:22

标签: java randomaccessfile

我有代码:

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)给出null。

1 个答案:

答案 0 :(得分:2)

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

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

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

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