初心者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());?}}執(zhí)行結(jié)果: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());?}}結(jié)果:214748364749223372036854775807兩者只是??raf.writeLong(lon);?位置不同,為什么一個(gè)包異常,一個(gè)正常運(yùn)行,程序一插入代碼任有問(wèn)題,這是為何???
1 回答
已采納

四無(wú)小青年
TA貢獻(xiàn)88條經(jīng)驗(yàn) 獲得超43個(gè)贊
問(wèn)題出在readLong()和writeLong()這個(gè)兩個(gè)方法,在JDK API文檔中提到過(guò)readLong()方法會(huì)從當(dāng)前指針位置開(kāi)始向后面讀取八個(gè)字節(jié),如果在讀取八個(gè)字節(jié)之前此文件已到達(dá)末尾會(huì)拋出EOFException異常。
你第一個(gè)程序在使用writeLong()之后,文件指針指向了最后一位,此時(shí)你再使用readLong()就會(huì)在讀取八位之前就到達(dá)文尾部。
第二個(gè)程序沒(méi)有報(bào)錯(cuò)是因?yàn)槟阍趓eadLong()之前使用seek()把文件指針移動(dòng)到了0號(hào)位置,此時(shí)再使用readLong()就能讀完八個(gè)字節(jié)而不報(bào)錯(cuò)了。
如果為題主解了惑的話,請(qǐng)采納
添加回答
舉報(bào)
0/150
提交
取消