• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

RandomAccessFile文件读取操作

程序一:
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());
}
}
执行结果:
2147483647
4
Exception 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());
}
}
结果:2147483647
4
9223372036854775807

两者只是  raf.writeLong(lon); 位置不同,为什么一个包异常,一个正常运行,程序一插入代码任有问题,这是为何啊?

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与1

问题出在readLong()和writeLong()这个两个方法,在JDK API文档中提到过readLong()方法会从当前指针位置开始向后面读取八个字节,如果在读取八个字节之前此文件已到达末尾会抛出EOFException异常。
你第一个程序在使用writeLong()之后,文件指针指向了最后一位,此时你再使用readLong()就会在读取八位之前就到达文尾部。
第二个程序没有报错是因为你在readLong()之前使用seek()把文件指针移动到了0号位置,此时再使用readLong()就能读完八个字节而不报错了。
如果为题主解了惑的话,请采纳

使用道具 举报

发新帖

发布任务需求已有1031167位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!