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

  • 相关阅读:
    Android getResources的作用和需要注意点
    Android 中的Affinity
    关于Android下各个布局方式里面LayoutParams的用法
    kaifa xin
    imageVIew
    实验三 区域四连通填充算法
    实验四 二维几何变换
    OpenGL开发库的详细介绍zz
    附加实验2 OpenGL变换综合练习
    实验3 OpenGL几何变换
  • 原文地址:https://www.cnblogs.com/huangweikun/p/8878249.html
Copyright © 2020-2023  润新知