2013-10-16 25 views
0

我的代码:RandomAccessFile的:获取java.io.EOFException的

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的数据?寻求(12)是无效的。

+1

你是否必须使用'writeUTF()'?了解以UTF格式写入的数据的长度非常困难。与'writeBytes()'或'writeChars()'相比,字节偏移量只是字符串的长度(或字符串* 2的长度)。 –

+0

EOFException不是'null'。下定决心。您需要阅读writeUTF()的文档。它写的字节数比你计算的多,但无论如何我不知道你从哪里得到了12。 – EJP

+0

@Dukeling谢谢! – TheEyesHaveIt

回答

2

int不为2个字节,这是4.与writeUTF写入2字节长度的前缀,所以总长度应该是18

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

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

当您在12传递,它会尝试读取使用ng的长度,也就是28263,这显然是比你的文件不再是有点UTF字符串。