1、什麼是序列化,反序列化。
序列化就是將對象轉化成二進制字節碼。反序列化就是把二進制字節碼從新轉化成對象。html
2、爲何須要序列化
舉個例子,咱們須要在網絡上傳輸咱們的對象中的狀態數據,可是網絡中只能傳輸二進制字節碼,因此這時候就須要經過序列化對象技術來把咱們的對象信息轉化成二進制字節碼,把咱們的二進制字節碼傳輸到接收方,接收方再經過反序列化將接收的二進制字節碼轉換成具備狀態數據的對象。還有一種狀況是咱們須要持久化咱們的對象信息,經過序列化能夠把對象信息保存到文件中。java
序列化的原理就是把咱們的對象相關的全部信息(包括類信息,對象狀態信息)經過必定的格式組織起來,輸出到相應的輸出流中。具體關於Java序列化的內部原理可參考 深刻學習Java序列化json
3、如何進行序列化
Java默認序列化:Java的默認的序列化方式須要繼承Serializable接口網絡
1 /** 2 * @author jacken 3 * @date 2018/04/29 4 */ 5 public class Person implements Serializable { 6 7 private String name; 8 private Integer age; 9 10 public String getName() { 11 return name; 12 } 13 14 public void setName(String name) { 15 this.name = name; 16 } 17 18 public Integer getAge() { 19 return age; 20 } 21 22 public void setAge(Integer age) { 23 this.age = age; 24 } 25 }
1 package com.jacken.test.serialize; 2 3 import java.io.File; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.ObjectOutputStream; 8 9 /** 10 * @author jacken 11 * @date 2018/04/20 12 */ 13 public class Serialize { 14 15 public static void main(String[] args) { 16 try (FileOutputStream fileOutputStream = new FileOutputStream( 17 new File("/Users/Shared/test.txt"))) { 18 ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); 19 Person person = new Person(); 20 person.setAge(11); 21 person.setName("test"); 22 objectOutputStream.writeObject(person); 23 objectOutputStream.flush(); 24 objectOutputStream.close(); 25 } catch (FileNotFoundException e) { 26 e.printStackTrace(); 27 } catch (IOException e) { 28 e.printStackTrace(); 29 } 30 } 31 32 }
反序列化框架
1 package com.jacken.test.serialize; 2 3 import com.alibaba.fastjson.JSON; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.IOException; 8 import java.io.ObjectInputStream; 9 10 /** 11 * @author jacken 12 * @date 2018/04/20 13 */ 14 public class Serialize { 15 16 public static void main(String[] args) { 17 try (FileInputStream fileInputStream = new FileInputStream(new File("/Users/Shared/test.txt"));) { 18 ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); 19 Person deserializePerson = (Person) objectInputStream.readObject();
21 } catch (FileNotFoundException e) { 22 e.printStackTrace(); 23 } catch (IOException e) { 24 e.printStackTrace(); 25 } catch (ClassNotFoundException e) { 26 e.printStackTrace(); 27 } 28 } 30 }
這是Java的默認的序列化方式,固然也可使用Json、Protobuf、Thrift、Marshlling等框架進行序列化,不一樣的序列化方式就是將對象轉換成字節碼的組織格式的不一樣。學習