首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >序列化

序列化

作者头像
在水一方
发布2022-06-14 15:28:43
发布2022-06-14 15:28:43
2500
举报
文章被收录于专栏:在水一方在水一方

平时在开发中在进行数据持久化和网络传输时经常用到序列化,除了知道让对象实现Serializable接口这个操作,通过查看这个接口可以看到里面没有任何方法,对于其了解的并不深刻,本文来对这部分内容进行小结

内存中(jvm的堆内存中)的数据对象只有转化成二进制流才可以进行持久化和网络传输

序列化概念

将数据对象转化为二进制流的过程称之为对象的序列化

在 Java 中,只要一个类实现了 java.io.Serializable 接口,那么它就可以被序列化 通过ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化

使用的常见场景

RPC框架的数据传输

序列化类型

java原生序列化

java类通过实现Serializable接口来实现该对象的序列化,这个接口非常特殊,没有任何方法,只起标识作用

特点:兼容性最好,不支持跨语言,性能一般

对象序列化机制是 Java 语言内建的一种对象持久化方式

Hessian序列化

一种动态类型,跨语言基于对象传输的网络协议,java对象序列化的二进制流可以被其他语言(如C++,Python)反序列化

特点:

json序列化

将数据对象转换为json字符串,json的可读性好,方便调试

为什么要定义serialversionUID

实现Serializable接口的类一定要显式的定义serialversionUID、

transient防止反编译

将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被序列化。 简单点说,就是被 transient 修饰的成员变量,在序列化的时候其值会被忽略,在被反序列化后, transient 变量的值被设为初始值, 如 int 型的是 0,对象型的是 null 如HashMap实现了Serializable接口,其中很多成员变量就是加了这个关键字修饰如:size,modCount等

也可以参考一下以下博客: https://blog.csdn.net/weixin_45596022/article/details/114258708

问题

为什么会出现Fastjson反序列化漏洞? 序列化是深 clone的一种实现?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 序列化概念
  • 使用的常见场景
  • 序列化类型
    • java原生序列化
    • Hessian序列化
    • json序列化
  • 为什么要定义serialversionUID
  • transient防止反编译
  • 问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档