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等框架进行序列化,不一样的序列化方式就是将对象转换成字节码的组织格式的不一样。学习