1. 程式人生 > >Java序列化隨記

Java序列化隨記

序列 ans style left int 進制 刪除 關鍵字 china

序列化簡介:

  程序中的對象並不只是存在內存中,還需要傳輸網絡,或者保存起來下次再加載出來用,因此需要Java序列化技術。

  Java序列化技術正是將對象轉變成一串由二進制字節組成的數組,可以通過將二進制數據保存到磁盤或者傳輸網絡,磁盤或者網絡接收者可以在對象的屬類的模板上來反序列化類的對象,達到對象持久化的目的

如何序列化一個對象?

首先要序列化一個對象,這個對象所在類就必須實現Java序列化的接口:java.io.Serializable。

類實現序列化接口:

 1 import java.io.Serializable;
 2 
 3 public class
User implements Serializable { 4 5 private String username; 6 private String address; 7 public String getUsername(){ 8 return username; 9 } 10 11 public void setUsername(String username) { 12 this.username = username; 13 } 14 15 public
String getAddress() { 16 return address; 17 } 18 19 public void setAddress(String address) { 20 this.address = address; 21 } 22 23 @Override 24 public String toString() { 25 return "User{" + 26 "username=‘" + username + ‘\‘‘ + 27
", address=‘" + address + ‘\‘‘ + 28 ‘}‘; 29 } 30 }

序列化/反序列化

 1 import org.apache.commons.lang3.SerializationUils;
 2 public class Test {
 3     public static void main(String[] args) {
 4         User user = new User();
 5         user.setUsername("YJ");
 6         user.setAddress("China");
 7         //序列化對象
 8         byte[] bytes = SerialzationUtils.serialize(user);
 9         
10         //反序列化
11         User user1 = SerializationUtils.deserialize(bytes);
12         System.out.println(user1);
13     }
14 }

輸出:

User{username=‘YJ‘,address=‘China‘}

這個例子就是通過序列化對象字節到內存然後反序列化,當然工具類裏面也提供了序列化磁盤然後再反序列化的方法,原理都是一樣的,只是目標地不一樣。

序列化總結:

  • 序列化對象必須實現序列化接口。

  • 序列化對象裏面的屬性是對象的話也要實現序列化接口。

  • 類的對象序列化後,類的序列化ID不能輕易修改,不然反序列化會失敗。

  • 類的對象序列化後,類的屬性有增加或者刪除不會影響序列化,只是值會丟失。

  • 如果父類序列化了,子類會繼承父類的序列化,子類無需添加序列化接口。

  • 如果父類沒有序列化,子類序列化了,子類中的屬性能正常序列化,但父類的屬性會丟失,不能序列化。

  • 用Java序列化的二進制字節數據只能由Java反序列化,不能被其他語言反序列化。如果要進行前後端或者不同語言之間的交互一般需要將對象轉變成Json/Xml通用格式的數據,再恢復原來的對象。

  • 如果某個字段不想序列化,在該字段前加上transient關鍵字即可。

Java序列化隨記