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不知道要读多少