亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 2315 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號