码迷,mamicode.com
首页 > 编程语言 > 详细

Java序列化

时间:2018-04-29 22:07:43      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:serial   style   get   数据   传输   rgs   保存到文件   二进制   默认   

一、什么是序列化,反序列化。

  序列化就是将对象转化成二进制字节码。反序列化就是把二进制字节码重新转化成对象。

二、为什么需要序列化

      举个例子,我们需要在网络上传输我们的对象中的状态数据,但是网络中只能传输二进制字节码,所以这时候就需要通过序列化对象技术来把我们的对象信息转化成二进制字节码,把我们的二进制字节码传输到接收方,接收方再通过反序列化将接收的二进制字节码转换成具有状态数据的对象。还有一种情况是我们需要持久化我们的对象信息,通过序列化可以把对象信息保存到文件中。

     序列化的原理就是把我们的对象相关的所有信息(包括类信息,对象状态信息)通过一定的格式组织起来,输出到相应的输出流中。具体关于Java序列化的内部原理可参考 深入学习Java序列化

三、如何进行序列化

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

Java序列化

标签:serial   style   get   数据   传输   rgs   保存到文件   二进制   默认   

原文地址:https://www.cnblogs.com/huangweikun/p/8878249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!