开发者社区> AIoT_倪晨> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

序列化与反序列化

简介: 原先仅仅知道序列化需要实现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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
序列化
对象序列化后保存到磁盘上
8 0
序列化和反序列化
序列化和反序列化
60 0
C# 序列化、反序列化
刚刚碰巧群里有人问这个问题,而之前的博客中并没有提及,打算弄一篇博客简单提及一下这个知识点。 MSDN文档中提及了序列化、反序列化的概念,这里引用一下。
642 0
C# 序列化、反序列化
刚刚碰巧群里有人问这个问题,而之前的博客中并没有提及,打算弄一篇博客简单提及一下这个知识点。 MSDN文档中提及了序列化、反序列化的概念,这里引用一下。
754 0
+关注
文章
问答
来源圈子
更多
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载