为了账号安全,请及时绑定邮箱和手机立即绑定

RandomAccessFile文件读取操作

RandomAccessFile文件读取操作

初心者3612361 2016-11-13 22:36:17
程序一: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()就能读完八个字节而不报错了。

如果为题主解了惑的话,请采纳


查看完整回答
1 反对 回复 2016-11-17
  • 1 回答
  • 0 关注
  • 2280 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信