您好,登錄后才能下訂單哦!
這篇文章主要為大家詳細介紹了java序列化的實現方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
序列化的實現:
將需要被序列化的類實現Serializable接口,該接口沒有需要實現的方法,implements Serializable
只是為了標注該對象是可被序列化的,然后使用一個輸出流(如:FileOutputStream
)來構造一個ObjectOutputStream
(對象流)對象,接著,使用ObjectOutputStream
對象的writeObject(Object obj)
方法就可以將參數為obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。
對象序列化
java.io.ObjectOutputStream
代表對象輸出流,它的writeObject(Object obj)
方法可對參數指定的obj對象進行序列化,把得到的字節序列寫到一個目標輸出流中。只有實現了Serializable
和Externalizable
接口的類的對象才能被序列化。
java.io.ObjectInputStream
代表對象輸入流,它的readObject()
方法從一個源輸入流中讀取字節序列,再把它們反序列化為一個對象,并將其返回。
代碼示例:
import java.io.*; import java.util.Date; public class ObjectSaver { public static void main(String[] args) throws Exception { /*其中的 D:\\objectFile.obj 表示存放序列化對象的文件*/ //序列化對象 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("D:\\objectFile.obj")); Customer customer = new Customer("王麻子", 24); out.writeObject("你好!"); //寫入字面值常量 out.writeObject(new Date()); //寫入匿名Date對象 out.writeObject(customer); //寫入customer對象 out.close(); //反序列化對象 ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:\\objectFile.obj")); System.out.println("obj1 " + (String) in.readObject()); //讀取字面值常量 System.out.println("obj2 " + (Date) in.readObject()); //讀取匿名Date對象 Customer obj3 = (Customer) in.readObject(); //讀取customer對象 System.out.println("obj3 " + obj3); in.close(); } } class Customer implements Serializable { private String name; private int age; public Customer(String name, int age) { this.name = name; this.age = age; } public String toString() { return "name=" + name + ", age=" + age; } }
執行結果:
說明:
1、讀取對象的順序與寫入時的順序要一致。
2、對象的默認序列化機制寫入的內容是:對象的類,類簽名,以及非瞬態和非靜態字段的值。
關于java序列化的實現方法就分享到這里了,希望以上內容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。