序列化与反序列化

简介: 原先仅仅知道序列化需要实现Serializable即可,这会因为接口返回结果是序列化的json对象,需要做反序列化处理,这次就理一理,序列化的相关知识,总结下,如有描述错误的,请评论指出

序列化

先看下百度百科的介绍
截屏2022-10-04 16.51.15.png
我们可以简单理解为序列化就是将实例转化为二进制数据存储起来的过程,反序列化就是相反的过程

为什么会出现序列化,有什么用?

在实际工作项目中,对象实例化后是在内存中存储的,对象也会被回收,要想永久保存对象数据,就需要序列化了。

如何实现序列化

1.创建Person并实现Serializable接口
import java.io.Serializable;

public class Person implements Serializable {
    private  String name;
    private  String bankId;
    private  static String sex="男";
    private  transient String password;
    private static final long serialVersionUID = -3234214123421341234L;

    public Person(String name,String bankId,String password) {
        this.name = name;
        this.bankId=bankId;
        this.password=password;
    }
}
2.序列化与反序列化
import java.io.*;

import com.google.gson.Gson;

public class SerialDemo {

    //序列化
    public static void serialization() throws Exception{
        //创建个文件来接受写序列化后的数据
        File f = new File("Person.txt");
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));
        //实例化个对象
        Person p = new Person("A","123456789","abcdefg");
        //将对象写到文档中
        out.writeObject(p);
        out.close();
        System.out.println("序列化完成");
    }

    //反序列化
    public static void deserialization() throws Exception{
        File f = new File("Person.txt");
        //读取文件中的数据转为对象
        ObjectInputStream in = new ObjectInputStream(new FileInputStream(f));
        Object newP = in.readObject();
        in.close();
        //可以打印下反序列化生成的对象newP
        System.out.println(new Gson().toJson(newP));
        System.out.println("反序列化完成");
    }
    public static void main(String[] args) throws Exception {
        serialization();
        deserialization();

    }
}
3.运行结果

截屏2022-10-05 10.18.06.png

需要注意的点

  • 被static修饰的属性无法被序列化(这个很好理解静态属性是与类绑定的而不是对象)
  • 被transient修饰的属性无法被序列化(有些成员变量不需要被序列化,如Person中的password)
  • serialVersionUID是序列化的版本号(基本序列化的对象都会显示的声明一下,以防对象被修改导致无法序列化)

java原生序列化的缺点

  • 无法跨语言 Java序列化的字节数组,其他语言无法反序列化
  • 序列化后的码流太大
  • 序列化性能太低

目前主流序列化框架

json、ProtoBuf

目录
相关文章
|
2月前
|
存储 XML JSON
数据传输的艺术:深入探讨序列化与反序列化
数据传输的艺术:深入探讨序列化与反序列化
54 0
|
2月前
|
存储 C#
C#中的序列化和反序列化
C#中的序列化和反序列化
12 0
|
2月前
|
存储 Java 数据库
|
29天前
|
JSON 安全 Java
Spring Boot 序列化、反序列化
本文介绍了Spring Boot中的序列化和反序列化。Java提供默认序列化机制,通过实现Serializable接口实现对象到字节流的转换。Spring Boot默认使用Jackson处理JSON,可通过注解和配置自定义规则。然而,序列化可能引发安全问题,建议使用白名单、数据校验和安全库。最佳实践包括使用标准机制、自定义规则及注意版本控制。文章还提醒关注性能并提供了相关参考资料。
44 2
|
2天前
|
XML 存储 JSON
[计算机网络]---序列化和反序列化
[计算机网络]---序列化和反序列化
|
4月前
|
分布式计算 Java 大数据
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
53 0
|
9天前
|
存储 JSON PHP
python序列化与反序列化
python序列化与反序列化
|
11天前
|
存储 Java 测试技术
滚雪球学Java(22):序列化和反序列化
【4月更文挑战第11天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
26 1
滚雪球学Java(22):序列化和反序列化
|
14天前
|
SQL 存储 安全
每日一道面试题:Java中序列化与反序列化
每日一道面试题:Java中序列化与反序列化
10 0
|
24天前
|
存储 Java
Java输入输出:解释一下序列化和反序列化。
Java中的序列化和反序列化是将对象转换为字节流和反之的过程。ObjectOutputStream用于序列化,ObjectInputStream则用于反序列化。示例展示了如何创建一个实现Serializable接口的Person类,并将其序列化到文件,然后从文件反序列化回Person对象。
27 5

热门文章

最新文章