接上一篇java基礎篇---I/O技術(二)
Java對象的序列化和反序列化什么叫對象的序列化和反序列化要想完成對象的輸入或輸出,還必須依靠對象輸出流(ObjectOutputStream)和對象輸入流(ObjectInputStream)。使用對象輸出流輸出序列化對象的步驟,有時也成序列化,而使用對象輸入流讀入對象的過程,有時也稱為反序列化
一個對象產生之后實際上是在內存中為其開辟了一個存儲空間,方便存儲信息、
對象序列化就是把一個對象變成二進制的數據流的一個方法,通過對象序列化可以反駁的實現對象的傳輸或存儲。

注意:如果一個類的對象想被序列化,則對象所在的類必須實現java.io.Serializable接口
對象序列化的用途在對象進行序列化或反序列胡操作時,要考慮JDK版本問題,如果序列化的JDK和反序列化的JDK版本不統一就可能出現異常,所以在序列操作中引入一個seriaVersionUID常量,來驗證版本的一致性。
對象序列化及反序列化操作對象序列化依靠ObjectOutputStream,對象反序列化依靠ObjectInputStream
序列化:ObjectOutputStream直接用實例
import java.io.File ;import java.io.FileOutputStream ;import java.io.OutputStream ;import java.io.ObjectOutputStream ;public class ObjectOutputStream{ public static void main(String args[]) throws Exception { File f = new File("D:" + File.separator + "test.txt") ; // 定義保存路徑 ObjectOutputStream oos = null ; // 聲明對象輸出流 OutputStream out = new FileOutputStream(f) ; // 文件輸出流 oos = new ObjectOutputStream(out) ; oos.writeObject(new Person("張三",30)) ; // 保存對象 oos.close() ; // 關閉 }};反序列化:ObjectInputStreamimport java.io.File ;import java.io.FileInputStream ;import java.io.InputStream ;import java.io.ObjectInputStream ;public class ObjectInputStream{ public static void main(String args[]) throws Exception { File f = new File("D:" + File.separator + "test.txt") ; // 定義保存路徑 ObjectInputStream ois = null ; // 聲明對象輸入流 InputStream input = new FileInputStream(f) ; // 文件輸入流 ois = new ObjectInputStream(input) ; // 實例化對象輸入流 Object obj = ois.readObject() ; // 讀取對象 ois.close() ; // 關閉 System.out.PRintln(obj) ; }};transient關鍵字在序列化操作中,如果某個屬性不希望被序列化下來,可以使用transient關鍵字聲明
Java I/O---回退流回退:給了用戶第二次讀的機會。
回退流在java IO中多有的數據都是采用順序的讀取方式,即對于一個輸入流來講都是采用從頭到尾順序讀取的,如果在輸入流中某個不需要的內容被讀取進來,則只能通過程序將這些不需要的內容處理掉,為了解決這一的讀取問題,在java中提供了一中回退輸入流(PushbackInputStream,PushbackReader),可以吧讀取進來的某些數據重寫退回到輸入流的緩沖區之中。
使用InputStream要使用read()方法不斷讀取,是采用順序的讀取方式。
回退流操作機制

import java.io.ByteArrayInputStream ;import java.io.PushbackInputStream ;public class PushInputStreamDemo{ public static void main(String args[]) throws Exception { // 所有異常拋出 String str = "www.mldnjava.cn" ; // 定義字符串 PushbackInputStream push = null ; // 定義回退流對象 ByteArrayInputStream bai = null ; // 定義內存輸入流 bai = new ByteArrayInputStream(str.getBytes()) ; // 實例化內存輸入流 push = new PushbackInputStream(bai) ; // 從內存中讀取數據 System.out.print("讀取之后的數據為:") ; int temp = 0 ; while((temp=push.read())!=-1){ // 讀取內容 if(temp=='.'){ // 判斷是否讀取到了“.” push.unread(temp) ; // 放回到緩沖區之中 temp = push.read() ; // 再讀一遍 System.out.print("(退回"+(char)temp+")") ; }else{ System.out.print((char)temp) ; // 輸出內容 } } }};新聞熱點
疑難解答