java基础之序列化和反序列化

概念

Java的序列化是将对象转换为字节流的过程,使得对象可以通过网络传输或者在分布式系统中进行对象的传递等。那么反序列化就是将字节流转为对象的过程了,在反序列化过程中,Java会使用字节流中的信息重构对象,并将其重新加载到内存中。

应用场景

网络传输,持久化存储,缓存,远程调用等

序列化的实现

java的类中只有继承Sericalizable接口才可以被序列化,同时最好指定一个SericalizableUID,

一般情况下我们都写为

private static final long serialVersionUID = 1L;

这个可以理解为版本号,jvm会把传进来的字节流中的serialVersionUID与本地实体类的serialVersionUID进行对比,如果相同就认为是一致的,就可以进行反序列化,否则就会报序列化版本不一样的异常。如果我们在实现Sericalizable接口的时候没有给定UID,jvm每次编译的时候就会默认生成一个UID,这样的话当反序列化之前程序修改了一些代码,比如增加了一些字段,再次编译时就会再生成另外不同的UID,当反序列话进行比对的时候自然就对不上了,便会报异常。

反序列化的问题

攻击者能够将恶意数据序列化存储到数据库或内存中或者执行我们不期望的代码,因此在反序列化的过程中我们还需要进行安全检测,如JWT就是其中的一个措施。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值