您好,登錄后才能下訂單哦!
序列化 (Serialization)是將對象的狀態(tài)信息轉換為可以存儲或傳輸?shù)男问降倪^程。在序列化期間,對象將其當前狀態(tài)寫入到臨時或持久性存儲區(qū)。以后,可以通過從存儲區(qū)中讀取或反序列化對象的狀態(tài),重新創(chuàng)建該對象。
對于任何可能包含重要的安全性數(shù)據(jù)的對象,如果可能,應該使該對象不可序列化。如果它必須為可序列化的,請嘗試生成特定字段來保存不可序列化的重要數(shù)據(jù)。如果無法實現(xiàn)這一點,則應注意該數(shù)據(jù)會被公開給任何擁有序列化權限的代碼,并確保不讓任何惡意代碼獲得該權限。
詳細解釋:
當兩個進程在進行遠程通信時,彼此可以發(fā)送各種類型的數(shù)據(jù)。無論是何種類型的數(shù)據(jù),都會以二進制序列的形式在網(wǎng)絡上傳送。發(fā)送方需要把這個Java對象轉換為字節(jié)序列,才能在網(wǎng)絡上傳送;接收方則需要把字節(jié)序列再恢復為Java對象。
只能將支持 java.io.Serializable 接口的對象寫入流中。每個 serializable 對象的類都被編碼,編碼內容包括類名和類簽名、對象的字段值和數(shù)組值,以及從初始對象中引用的其他所有對象的閉包。
技術:
* 二進制序列化保持類型保真度,這對于在應用程序的不同調用之間保留對象的狀態(tài)很有用。例如,通過將對象序列化到剪貼板,可在不同的應用程序之間共享對象。您可以將對象序列化到流、磁盤、內存和網(wǎng)絡等等。遠程處理使用序列化“通過值”在計算機或應用程序域之間傳遞對象。
* XML 序列化僅序列化公共屬性和字段,且不保持類型保真度。當您要提供或使用數(shù)據(jù)而不限制使用該數(shù)據(jù)的應用程序時,這一點是很有用的。由于 XML 是一個開放式標準,因此,對于通過 Web 共享數(shù)據(jù)而言,這是一個很好的選擇。SOAP 同樣是一個開放式標準,這使它也成為一個頗具吸引力的選擇。
1、概念
序列化:把Java對象轉換為字節(jié)序列的過程。
反序列化:把字節(jié)序列恢復為Java對象的過程。
2、用途
對象的序列化主要有兩種用途:
1) 把對象的字節(jié)序列永久地保存到硬盤上,通常存放在一個文件中;
2) 在網(wǎng)絡上傳送對象的字節(jié)序列。
3、對象序列化
序列化API
java.io.ObjectOutputStream代表對象輸出流,它的writeObject(Object obj)方法可對參數(shù)指定的obj對象進行序列化,把得到的字節(jié)序列寫到一個目標輸出流中。只有實現(xiàn)了Serializable和Externalizable接口的類的對象才能被序列化。
java.io.ObjectInputStream代表對象輸入流,它的readObject()方法從一個源輸入流中讀取字節(jié)序列,再把它們反序列化為一個對象,并將其返回。
代碼示例
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; } }
以上就是java序列化是什么的詳細內容,更多請關注億速云其它相關文章!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。