




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
面向對象程序設計第11章輸入/輸出
1I/O概述23主要內容面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)二進制I/O流案例:文件加密解密45文本I/O流案例:統計文件行數、單詞數和字符數6對象序列化11.1I/O概述面向對象程序設計輸入/輸出(I/O)是任何程序設計語言都提供的功能,Java語言從一開始就支持I/O,最初是通過java.io包中的類和接口提供支持的,之后又出現了NIO和NIO.2。概述目前Java支持流式I/O和文件I/O。流式I/O分為輸入流和輸出流。程序為了獲得外部數據,可以在數據源(文件、內存及網絡套接字)上創建一個輸入流,然后用read()方法順序讀取數據。類似地,程序可以在輸出設備上創建一個輸出流,然后用write()方法將數據寫到輸出流。所有的數據流都是單向的。使用輸入流只能從中讀取數據;使用輸出流,只能向其寫出數據,如圖13-1所示。概述按照處理數據的類型分,數據流又可分為二進制流和文本流,也分別稱為字節流和字符流,它們處理的信息的基本單位分別是字節和字符。java.io.File類用來表示物理磁盤上的實際文件或目錄,但它不表示文件中數據。11.1.1File類應用絕對文件名是由驅動器字母、完整的路徑以及文件名組成,如D:\study\Hello.txt是Windows系統下的一個絕對文件名。相對文件名是相對于當前工作目錄的。例如,Hello.txt是一個相對文件名。如果當前工作目錄是D:\study,絕對文件名是D:\study\Hello.txt。importjava.io.*;publicclassFileDemo{publicstaticvoidmain(String[]args){varfile=newFile("Hello.txt");//此時文件還不存在!}}編譯并運行該程序,當查看當前目錄,找不能到Hello.txt文件。這說明創建一個File實例并不是創建實際的文件,而僅僅創建一個表示文件的對象。如果要創建實際的文件,可使用下面代碼:try{booleansuccess=false;varfile=newFile("Hello.txt");System.out.println(file.exists());//輸出文件是否存在success=file.createNewFile();
//創建文件是否成功System.out.println(success);System.out.println(file.exists());//輸出文件是否存在}catch(IOExceptione){System.out.println(e.toString());}下面是File類最常用操作方法。publicbooleanexists():測試File對象是否存在。publiclonglength():返回指定文件的字節長度,文件不存在時返回0。publicbooleancreateNewFile():當文件不存在時,創建一個空文件時返回true,否則返回false。publicbooleanrenameTo(FilenewName):重新命名指定的文件對象,正常重命名時返回true,否則返回false。publicbooleandelete():刪除指定的文件。若為目錄,當目錄為空才能刪除。publiclonglastModified():返回文件最后被修改的日期和時間,它計算的是從1970年1月1日0時0分0秒開始的毫秒數。11.1.1File類應用文件通常可以分為文本文件和二進制文件。文本文件(textfile)是包含字符序列的文件,可以使用文本編輯器查看或通過程序閱讀。內容必須按二進制序列處理的文件稱為二進制文件(binaryfile)。11.1.2文本I/O與二進制I/O實際上,計算機并不區分二進制文件與文本文件。所有的文件都是以二進制形式來存儲的,因此,從本質上說,所有的文件都是二進制文件。對于文本I/O而言,在寫入一個字符時,Java虛擬機會將字符的統一碼轉換為文件指定的編碼,在讀取字符時,將文件指定的編碼轉換為統一碼。11.1.2文本I/O與二進制I/O使用文本I/O將字符串“123”寫入文件,那么每個字符的二進制編碼都會寫入到文件。二進制I/O不需要進行轉換。如果使用二進制I/O向文件寫入一個數據,就是將內存中的值復制到文件中。11.1.2文本I/O與二進制I/O例如,一個byte類型的數值123在內存中表示為01111011,將它寫入文件也是01111011。使用二進制I/O讀取一個字節時,就會從輸入流中讀取一個字節的二進制編碼。11.2二進制I/O流面向對象程序設計6.1.1publicintread()publicintread(byte[]b)publicvoidclose()InputStream類是二進制輸入流的根類,它有多個子類。InputStream類和OutputStream類面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)6.1.1
publicvoidwrite(intb)publicvoidwrite(byte[]b)publicvoidclose()OutputStream類是二進制輸出流的根類,它有多個子類。面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)InputStream類和OutputStream類FileInputStream類和FileOutputStream類用來實現文件的輸入輸出處理。11.2.2FileOutputStream類和FileInputStream類FileInputStream類和FileOutputStream類都實現了java.lang.AutoClosable接口,因此可以在try-with-resources語句中使用,當流使用完自動將它們關閉。FileOutputStream類的常用構造方法如下:FileOutputStream(Stringname):用表示文件的字符串創建文件輸出流對象。FileOutputStream(Stringname,booleanappend):用表示文件的字符串創建文件輸出流對象。如果append參數為true,則指明打開的文件輸出流不覆蓋原來的內容,而是從文件末尾寫入新內容,否則覆蓋原來的文件內容。FileOutputStream(Filefile):用File對象創建文件輸出流對象。11.2.2FileOutputStream類和FileInputStream類FileInputStream類的兩個常用的構造方法如下:
FileInputStream(Stringname):用表示文件的字符串創建文件輸入流對象。FileInputStream(Filefile):用File對象創建文件輸入流對象。11.2.2FileOutputStream類和FileInputStream類若指定的文件不存在,則產生FileNotFoundException異常,它是檢查異常,必須捕獲或聲明拋出。也可以先創建File對象,然后測試該文件是否存在,若存在再創建文件輸入流。publicstaticvoidmain(String[]args){varoutputFile=newFile("output.dat");try(varout=newFileOutputStream(outputFile);){for(vari=0;i<10;i++){intx=(int)(Math.random()*90)+10;out.write(x);}out.flush();//刷新輸出流System.out.println("已向文件寫入10個兩位數!");}catch(IOExceptione){System.out.println(e.toString());}}程序11.1WriteByteDemo.java
publicstaticvoidmain(String[]args){
varinputFile=newFile("output.dat");
try(
varin=newFileInputStream(inputFile);){
intc=in.read();
while(c!=-1){System.out.print(c+"");c=in.read();
}}catch(IOExceptione){System.out.println(e.toString());}
}程序11.2ReadByteDemo.javaBufferedInputStream的構造方法如下:BufferedInputStream(InputStreamin):使用參數in指定的輸入流對象創建一個緩沖輸入流。
BufferedInputStream(InputStreamin,intsize):使用參數in指定的輸入流對象創建一個緩沖輸入流,并且通過size參數指定緩沖區大小,默認為512個字節。使用上面兩個類,可以把輸入輸出流包裝成具有緩沖功能的流,從而提高輸入輸出的效率。11.2.3BufferedOutputStream類和BufferedInputStream類BufferedOutputStream為緩沖輸出流,BufferedInputStream為緩沖輸入流,這兩個類用來對流實現緩沖功能。使用緩沖流可以減少讀寫數據的次數,加快輸入輸出的速度。11.2.3BufferedOutputStream類和BufferedInputStream類BufferedOutputStream類的構造方法如下:BufferedOutputStream(OutputStreamout):使用參數out指定的輸出流對象創建一個緩沖輸出流。BufferedOutputStream(OutputStreamout,intsize):使用參數out指定的輸出流對象創建一個緩沖輸出流,并且通過size參數指定緩沖區大小,默認為512個字節。DataOutputStream類和DataInputStream類分別是數據輸出流和數據輸入流。使用這兩個類可以實現基本數據類型的輸入輸出。這兩個類的構造方法如下:11.2.4DataOutputStream類和DataInputStream類DataOutputStream(OutputStreamoutstream):參數outstream是字節輸出流對象。DataInputStream(InputStreaminstream):參數instream是字節輸入流對象。varinFile=newDataInputStream(newBufferedInputStream(newFileInputStream("input.dat")));varoutFile=newDataOutputStream(newBufferedOutputStream(newFileOutputStream("output.dat")));11.2.4DataOutputStream類和DataInputStream類DataOutputStream類定義的常用方法如下所示。publicvoidwriteByte(intv):將整數v低的8位寫入輸出流,忽略高24位。publicvoidwriteInt(intv):向輸出流寫一個4個字節的整數。publicvoidwriteLong(longv):向輸出流寫一個8個字節的長整數。publicvoidwriteDouble(doublev):向輸出流寫一8個字節的double型浮點數。publicvoidwriteBytes(Strings):將參數字符串每個字符的低位字節按順序寫到輸出流中。publicvoidwriteUTF(Strings):將參數字符串字符按UTF-8的格式寫出到輸出流中。UTF-8格式的字符串中每個字符可能是1個、2個或3個字節,另外字符串前要加2個字節存儲字符數量。11.2.4DataOutputStream類和DataInputStream類DataInputStream類定義的常用方法如下所示。publicbytereadByte():從輸入流讀一個字節并返回該字節。publicintreadInt():從輸入流讀4個字節,返回一個int型值。publiclongreadLong():從輸入流讀8個字節,返回一個long型值。publicdoublereadDouble():從輸入流讀8個字節,返回一個double型值。publicStringreadLine():從輸入流讀下一行文本。該方法已被標記為不推薦使用。publicStringreadUTF():從輸入流讀UTF-8格式的字符串。編寫程序,使用DataOutputStream流將數據寫入到文件中,這里還將數據流包裝成緩沖流。之后,使用DataInputStream流從文件中讀取數據并在控制臺輸出。數據I/O流的應用
//向文件中寫數據
try(FileOutputStreamoutput=newFileOutputStream("data.dat");DataOutputStreamdataOutStream=newDataOutputStream(
newBufferedOutputStream(output));
){dataOutStream.writeDouble(123.456);dataOutStream.writeInt(100);dataOutStream.writeUTF("Java語言");}catch(IOExceptione){e.printStackTrace();
}程序11.3DataStreamDemo.java
//從文件中讀取數據
try(FileInputStreaminput=newFileInputStream("data.dat");DataInputStreamdataInStream=newDataInputStream(
newBufferedInputStream(input));
){while(dataInStream.available()>0){
doubled=dataInStream.readDouble();
inti=dataInStream.readInt();Strings=dataInStream.readUTF();System.out.println("d="+d);System.out.println("i="+i);System.out.println("s="+s);
}}catch(IOExceptione){e.printStackTrace();
}PrintStream類為打印各種類型的數據提供了方便。PrintStream類定義了多個print()和println()方法,可以打印輸出各種類型的數據,這些方法都是把數據轉換成字符串,然后輸出。如果輸出到文件中則可以用記事本瀏覽。println()方法輸出后換行,print()方法輸出后不換行。11.2.5PrintStream類當把對象傳遞給這兩個方法時則先調用對象的toString()方法將對象轉換為字符串形式,然后輸出。在前面章節大量使用的System.out對象就是PrintStream類的一個實例,用于向控制臺輸出數據。Java在System類中定義了標準輸出流out,標準輸入流in以及標準錯誤輸出流err,如下所示。11.2.6標準輸入輸出流publicstaticfinaljava.io.PrintStreamout;publicstaticfinaljava.io.InputStreamin;publicstaticfinaljava.io.PrintStreamerr;System.in是InputStream類的實例。可以使用read()方法從鍵盤上讀取字節,也可以將它包裝成數據流讀取各種類型的數據和字符串。System.out和System.err是PrintStream類的實例,可以使用該類定義的方法輸出各種類型數據。6.1.1問題描述編寫程序,隨機生成10個1000到2000之間的整數,將它們寫到一個文件data.dat中,然后從該文件中讀出這些整數,要求使用DataInputStream和DataOutputStream類實現。課堂討論與訓練面向對象程序設計(Java語言描述微課版基于IntelliJIDEA)11.3案例:文件加密解密面向對象程序設計編寫一個簡單的文件加密、解密程序。文件加密、解密有多種方法,本案例使用一種簡單的算法,對文件的內容使用“異或”運算進行加密后保存到指定的文件中。要對文件解密,讀取文件中的加密內容,再次使用“異或”運算解密得到原文件內容。文件加密解密本案例使用“異或”運算對文件中字節進行加密、解密的原理可以描述如下:按位“異或”運算符的運算規則是:兩個操作數中,如果相應位相同,則結果為0,否則為1,例如:00101010^00010111=00111101“異或”運算符的特點是:用同一個數b對操作數a進行兩次“異或”運算,結果仍然為原值a。就是,如果c=a^b,那么a=c^b,即用同一個數b對數a進行兩次“異或”運算的結果又是數a。利用“異或”運算的這個性質,可以實現簡單的字節加密、解密操作。文件加密解密(1)程序首先要求用戶輸入要加密的文件名、加密后的文件名以及加密使用的秘鑰,也就是要在讀取的字節上做“異或”運算的整數。(2)使用FileInputStream和FileOutputStream創建輸入流(源文件)和輸出流(加密文件),從源文件讀取每個字節然后對它做“異或”運算,將結果寫入加密的文件。文件加密解密(3)文件解密的過程與加密的過程類似。使用FileInputStream和FileOutputStream創建輸入流(要解密的文件)和輸出流(解密后文件),從輸入流讀取每個字節然后對它做“異或”運算,將結果寫入解密后的文件。這里要注意,解密使用的秘鑰需與加密使用的秘鑰相同,否則得不到源文件。varinput=newScanner(System.in);StringsourceFile=null;StringsecretFile=null;varkeyValue=0;System.out.print("請輸入源文件名:");sourceFile=input.nextLine();System.out.print("請輸入加密文件名:");secretFile=input.nextLine();System.out.print("請輸入秘鑰:");keyValue=input.nextInt();程序11.4FileEncription.javavarsrcFile=newFile(sourceFile);varencFile=newFile(secretFile);if(!srcFile.exists()){System.out.println("源文件不存在!");System.exit(0);}if(!encFile.exists()){System.out.println("創建加密文件!");encFile.createNewFile();}try(varfis=newFileInputStream(srcFile);varfos=newFileOutputStream(encFile); ){vardataOfFile=fis.read();while(dataOfFile!=-1){
dataOfFile=dataOfFile^keyValue;fos.write(dataOfFile);dataOfFile=fis.read();}}
varinput=newScanner(System.in);StringsecretFile=null;StringresultFile=null;
varkeyValue=0;System.out.print("請輸入要解密文件:");secretFile=input.nextLine();System.out.print("請輸入解密后文件名:");resultFile=input.nextLine();System.out.print("請輸入秘鑰:");keyValue=input.nextInt();程序11.5FileDecription.java
varencFile=newFile(secretFile);
vardecFile=newFile(resultFile);
if(!encFile.exists()){System.out.println("解密的文件不存在!");System.exit(0);
}
if(!decFile.exists()){//System.out.println("創建目標文件!");decFile.createNewFile();
}
try(
varfis=newFileInputStream(encFile);
varfos=newFileOutputStream(decFile);
){
vardataOfFile=fis.read();
while(dataOfFile!=-1){dataOfFile=dataOfFile^keyValue;fos.write(dataOfFile);dataOfFile=fis.read();
}
}11.4文本I/O流面向對象程序設計文本I/O流以字符為基本單位,也叫字符I/O流。抽象類Reader和Writer分別是文本輸入流和輸出流的根類。概述概述Writer類是字符輸出流的根類,定義的常用方法有:publicvoidwrite(intc):向輸出流中寫一個字符,實際是將int型的c的低16位寫入輸出流。publicvoidwrite(Stringstr):把字符串str寫入輸出流中。publicvoidclose():關閉輸出流。11.4.1Reader類和Writer類Reader類是文本輸入流的根類,定義的常用方法有:
publicintread():讀取一個字符,返回范圍為0到65535之間int型值,如果到達流的末尾返回-1。publicvoidclose():關閉輸入流。FileReader類構造方法有:FileReader(StringfileName)FileReader(Filefile)11.4.2FileWriter類和FileReader類FileWriter類構造方法有:
FileWriter(StringfileName)
FileWriter(Filefile)FileWriter(StringfileName,booleanappend)下面的FileCopyDemo.java程序使用FileReader和FileWriter將文件input.txt(在項目跟目錄下)的內容復制到output.txt文件中。11.4.2FileWriter類和FileReader類FileinputFile=newFile("input.txt");FileoutputFile=newFile("output.txt");try(FileReaderin=newFileReader(inputFile);FileWriterout=newFileWriter(outputFile);
){intc=in.read();while(c!=-1){out.write(c);c=in.read();
}}catch(IOExceptione){System.out.println(e.toString());
}程序11.4FileCopyDemo.javaBufferedReader類和BufferedWriter類分別實現具有緩沖功能的字符輸入輸出流。這兩個類用來將其他的字符流包裝成緩沖字符流,以提高讀寫數據的效率。BufferedReader類的構造方法如下:publicBufferedReader(Readerin):用默認的緩沖區大小創建緩沖字符輸入流。publicBufferedReader(Readerin,intsz):用指定的緩沖區大小創建緩沖字符輸入流。11.4.3BufferedReader類和BufferedWriter類下面代碼創建了一個BufferedReader對象:varin=newBufferedReader(newFileReader("input.txt"));BufferedWriter類的構造方法如下:BufferedWriter(Writerout):用默認的緩沖區大小創建緩沖字符輸出流。BufferedWriter(Writerout,intsz):用指定的緩沖區大小創建緩沖字符輸出流。11.4.3BufferedReader類和BufferedWriter類通常Writer直接將輸出發送到基本的字符或字節流,建議在Writer上(如FileWriter和OutputStreamWriter)包裝BufferedWriter,例如:varbr=newBufferedWriter(newFileWriter("output.txt"));StringfileName="article.txt";
intsum=0;
try(FileReaderinFile=newFileReader(fileName);BufferedReaderreader=newBufferedReader(inFile);
){StringaLine=reader.readLine();
while(aLine!=null){String[]words=aLine.split("[,.]");sum=sum+words.length;aLine=reader.readLine();
}}catch(IOExceptione){System.out.println(e.toString());
}System.out.println("單詞數量為:"
+sum);程序11.5WordsCount.javaPrintWriter類實現字符打印輸出流,它的構造方法如下:PrintWriter(Writerout):使用參數指定的輸出流對象out創建一個打印輸出流。PrintWriter(Writerout,booleanautoFlush):如果autoFlush指定為true,則在輸出之前自動刷新輸出流。11.4.4PrintWriter類PrintWriter類定義的常用方法如下。publicvoidprintln(booleanb):輸出一個boolean型數據。publicvoidprintln(Strings):輸出一個String型數據。publicvoidprintln(Objectobj):將obj轉換成String型數據,然后輸出。下面程序隨機產生10個100到200之間的整數,然后使用PrintWriter對象輸出到文件number.txt中。11.4.4PrintWriter類for(vari=0;i<10;i++){varnum=(int)(Math.random()*101)+100;pw.println(num);}varfileName="number.txt"; varout=newFileWriter(newFile(fileName));varpw=newPrintWriter(out,true);//向文件中隨機寫入10個隨機整數for(vari=0;i<10;i++){varnum=(int)(Math.random()*101)+100;pw.println(num);}pw.close();程序11.6PrintWriterDemo.java//從文件中讀出10個整數varin=newFileReader(newFile(fileName));varreader=newBufferedReader(in);varaLine=reader.readLine();while(aLine!=null){System.out.print(aLine+"");aLine=reader.readLine();}reader.close();該程序運行后在項目目錄下創建一個number.txt文本文件,并且寫入10個整數,該文件可以用記事本打開。使用Scanner類從鍵盤讀取數據,這是在創建Scanner對象時將標準輸入設備System.in作為其構造方法的參數。使用Scanner還可以關聯文本文件,從文本文件中讀取數據。11.4.5使用Scanner對象Scanner類的常用的構造方法有:publicScanner(Stringsource):用指定的字符串構造Scanner對象,以便從中讀取數據。publicScanner(InputStreamsource):用指定的輸入流構造一個Scanner對象,以便從中讀取數據。Scanner類的常用方法如下所示:publicbytenextByte():讀取下一個標記并將其解析成byte型數。publicintnextInt():讀取下一個標記并將其解析成int型數。publicdoublenextDouble():讀取下一個標記并將其解析成double型數。publicStringnext():讀取下一個標記并將其解析成字符串。publicStringnextLine():讀取當前行作為一個String型字符串。11.4.5使用Scanner對象varfile=newFile("number.txt");try(varinput=newFileInputStream(file);varsc=newScanner(input)){while(sc.hasNextInt()){ vartoken=sc.nextInt(); System.out.println(token);}}catch(IOExceptione){e.printStackTrace();} 程序11.7TextFileDemo.java11.5案例:統計文件行數、單詞數和字符數面向對象程序設計經常需要對文本文件分析,比如查找有關內容,進行某種統計等。本案例要求編寫程序,統計一個英文文本文件中的字符數、單詞數和行數。單詞由空格和逗號、句號、分號和感嘆號這幾個個標點符號分隔,文件名由鍵盤讀入。統計文件行數、單詞數和字符數(1)創建Scanner對象,從鍵盤讀取要統計的源文件名,并判斷文件是否存在,存在繼續,不存在則強制程序結束。(2)創建FileReader和BufferedReader對象,使用readLine()方法從指定的文件讀取字符串進行解析。(3)對每一行的字符串,用String的length()方法計算字符數,再使用String類的split()方法根據置分隔符來解析所包含的單詞數。
varinput=newScanner(System.in);
varfilename="";System.out.print("請輸入文本文件名:");filename=input.nextLine();
varfile=newFile(filename);
if(!file.exists()){System.out.println("您輸入的文件不存在!");System.exit(0);
}程序11.8WordsCount.java
try(
varfis=newBufferedReader(newFileReader(file));
){
varcharNums=0;
varwordsNums=0;
varlineNums=0;
varaLine=fis.readLine();
while(aLine!=null){charNums=charNums+aLine.length();
varwords=aLine.split("[,;.!]");//5個符號wordsNums=wordsNums+words.length;lineNums=lineNums+1;aLine=fis.readLine();
}
System.out.println("文件="
+filename);System.out.println("共有行數="
+lineNums+"行");System.out.println("單詞數="
+wordsNums+"個"
);System.out.println("總共字符數="
+charNums+"個");}catch(IOExceptionioe){ioe.printStackTrace();
}11.6對象序列化面向對象程序設計對象的壽命通常隨著創建該對象的程序的終止而終止。有時可能需要將對象的狀態保存下來,在需要時再將其恢復。對象狀態的保存和恢復可以通過對象I/O流實現。11.6.1對象序列化與對象流將程序中的對象輸出到外部設備(如磁盤、網絡)中,稱為對象序列化(serialization)。反之,從外部設備將對象讀入程序中稱為對象反序列化(deserialization)。一個類的對象要實現對象序列化,必須實現java.io.Serializable接口,該接口的定義如下。publicinterfaceSerializable{}Serializable只是標識性接口,其中沒有定義任何方法。11.6.1對象序列化與對象流一個類的對象要序列化,除了必須實現Serializable接口外,還需創建對象輸出流和對象輸入流,然后,通過對象輸出流將對象狀態保存下來,通過對象輸入流恢復對象的狀態。在java.io包中定義了ObjectInputStream和ObjectOutputStream類,分別稱為對象輸入流和對象輸出流。若將對象寫到外部設備需要建立ObjectOutputStream類的對象,構造方法為:publicObjectOutputStream(OutputStreamout)參數out為一個字節輸出流對象。11.6.2向ObjectOutputStream中寫入對象創建了對象輸出流后,就可以調用它的writeObject()方法將一個對象寫到流中,該方法格式為:publicfinalvoidwriteObject(Objectobj)throwsIOException若寫出的對象不是可序列化的,該方法會拋出NotSerializableException異常。由于ObjectOutputStream類實現了DataOutput接口,該接口中定義多個方法用來寫入基本數據類型,如writeInt()、writeFloat()及writeDouble()等,可以使用這些方法向對象輸出流中寫基本數據類型。11.6.2向ObjectOutputStream中寫入對象下面代碼將一些數據和對象寫到對象輸出流中。oos.writeInt(2022);oos.writeObject("你好");oos.writeObject(LocalDate.now());若要從外部設備上讀取對象,需建立ObjectInputStream對象,該類的構造方法為:publicObjectInputStream(InputStreamin)參數in為字節輸入流對象。11.6.3從ObjectInputStream中讀取對象通過調用ObjectInputStream類的方法readObject()方法可以讀取一個對象,該方法的聲明格式為:publicfinalObjectreadObject()throwsIOException在使用readObject()方法讀出對象時,其類型和順序必須與寫入時一致。ObjectInputStream類實現了DataInput接口,該接口中定義了讀取基本數據類型的方法,如readInt()、readFloat()及readDouble(),使用這些方法可以從ObjectInputStream流中讀取基本數據類型。11.6.3從ObjectInputStream中讀取對象下面代碼在InputStream對象上建立一個對象輸入流對象。varfis=newFileInputStream("data.ser");varoip=newObjectInputStream(fis);inti=ois.readInt();vartoday=(String)ois.readObject();vardate=(LocalDate)ois.readObject();下面的例子說明如何實現對象的序列化和反序列化,這里的對象是Customer記錄類型的對象,它實現了Serializable接口。關于記錄類型,請參閱11.1節。示例:對象序列化和反序列化程序11.8Customer.javapackagecom.boda.xy;importjava.io.Serializable;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 瓷磚前臺銷售管理制度
- 生產車輛停放管理制度
- 六一親情日活動方案
- it客服管理制度
- vi形象管理制度
- 專項薪酬管理制度
- 業主帶班管理制度
- 中醫醫師管理制度
- 中國各省管理制度
- 中學教務管理制度
- 2025年高考全國二卷數學高考真題解析 含參考答案
- 2025年普通高等學校招生全國統一考試數學試題(全國一卷)(有解析)
- GB/T 7064-2008隱極同步發電機技術要求
- GB/T 3184-1993鉛鉻黃
- 通力電梯技能培訓教材系列:《KCE控制系統課程》
- 《中醫內科學》血證-課件
- 科研倫理與學術規范期末考試1題庫
- 2023年深圳市龍華產業資本投資有限公司招聘筆試題庫及答案解析
- 心電監護操作評分標準
- 國開經濟學(本)1-14章練習試題及答案
- 電纜橋架安裝記錄
評論
0/150
提交評論