当前位置: 代码迷 >> J2SE >> RandomAccessFile的readUTF()方法的有关问题
  详细解决方案

RandomAccessFile的readUTF()方法的有关问题

热度:36   发布时间:2016-04-23 20:28:39.0
RandomAccessFile的readUTF()方法的问题
public class FileOutputStream {
public static void main(String[] args) throws IOException {
RandomAccessFile raf = new RandomAccessFile("1.txt", "rw");
String str = "abc aaa ccc";
raf.writeUTF(str);
                                                                 //问题1:下面为什么输出13,字符串长度不是11吗,应该输出11啊
System.out.println(raf.getFilePointer());
                                                                //问题2:为什么下面这句参数设为0时不报错,而设置成1以上的数字
                                //都会出现EOFException异常,
                                //设置为4就是把指针指向第二个a啊,不是从aaa这里开始读取一个字符串吗?
                                //结果应该是aaa ccc啊,怎么会报错
raf.seek(4);
String str1 = raf.readUTF();
System.out.println(str1);
}
}


Exception in thread "main" java.io.EOFException
at java.io.RandomAccessFile.readFully(RandomAccessFile.java:383)
at java.io.DataInputStream.readUTF(DataInputStream.java:592)
at java.io.RandomAccessFile.readUTF(RandomAccessFile.java:887)
at FileIOStream.FileOutputStream.main(FileOutputStream.java:14)

------解决方案--------------------
writeUTF会首先把字符串字节数写上去,大小是两个字节,所以11个字节的数据,就需要13字节的空间,因此也要注意writeUTF一次最多写65535字节的数据

readUTF要从writeUTF的地方读,也就是从头部那两个表示字符串字节数的地方开始读,不然readUTF不知道要读多少