• Java序列化


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

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

    二、为什么需要序列化

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

         序列化的原理就是把我们的对象相关的所有信息(包括类信息,对象状态信息)通过一定的格式组织起来,输出到相应的输出流中。具体关于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等框架进行序列化,不同的序列化方式就是将对象转换成字节码的组织格式的不同。

  • 相关阅读:
    win7桌面的文件路径是否可以更改
    win10怎么更新flash到最新版本【系统天地】
    centos7 lnmp环境部署
    thinkphp5 部署注意事项
    linux下导入、导出mysql数据库命令的实现方法
    Centos7 系统下怎么更改apache默认网站目录
    centos7 配置lamp 环境
    Redis笔记(4)独立功能的实现
    Redis笔记(3)多数据库实现
    Redis笔记(2)单机数据库实现
  • 原文地址:https://www.cnblogs.com/huangweikun/p/8878249.html
Copyright © 2020-2023  润新知