程序一:public class Test08 { public static void main(String[] args) throws Exception { RandomAccessFile raf=new RandomAccessFile("raf.dat", "rw"); int max=Integer.MAX_VALUE; long lon=Long.MAX_VALUE; raf.writeInt(max); raf.seek(0); System.out.println(raf.readInt()); System.out.println(raf.getFilePointer()); //插入代码raf.seek(4); raf.writeLong(lon); System.out.println(raf.readLong()); }}执行结果:21474836474Exception in thread "main" java.io.EOFException at java.io.RandomAccessFile.readInt(Unknown Source) at java.io.RandomAccessFile.readLong(Unknown Source) at day06.Test08.main(Test08.java:23)程序二:public class Test08 { public static void main(String[] args) throws Exception { RandomAccessFile raf=new RandomAccessFile("raf.dat", "rw"); int max=Integer.MAX_VALUE; long lon=Long.MAX_VALUE; raf.writeInt(max); raf.writeLong(lon); raf.seek(0); System.out.println(raf.readInt()); System.out.println(raf.getFilePointer()); System.out.println(raf.readLong()); }}结果:214748364749223372036854775807两者只是 raf.writeLong(lon); 位置不同,为什么一个包异常,一个正常运行,程序一插入代码任有问题,这是为何啊?
1 回答
已采纳
四无小青年
TA贡献88条经验 获得超43个赞
问题出在readLong()和writeLong()这个两个方法,在JDK API文档中提到过readLong()方法会从当前指针位置开始向后面读取八个字节,如果在读取八个字节之前此文件已到达末尾会抛出EOFException异常。
你第一个程序在使用writeLong()之后,文件指针指向了最后一位,此时你再使用readLong()就会在读取八位之前就到达文尾部。
第二个程序没有报错是因为你在readLong()之前使用seek()把文件指针移动到了0号位置,此时再使用readLong()就能读完八个字节而不报错了。
如果为题主解了惑的话,请采纳
添加回答
举报
0/150
提交
取消