java序列化与json序列化

java序列化

Java 序列化可以将一个对象表示为一个字节序列。

(该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型)

可以把这个序列化对象写入文件之后,然后也可以从文件中读取出来,并且对它进行反序列化(即将字节序列转为java对象)

demo略掉了,demo用的是objectinputstream和objectOutputStream。

demo可以查看(https://www.runoob.com/java/java-serialization.html

 

补充一些细节上的东西,

1.序列化需实现seriable。
如果序列化的类有父类,则父类需实现seriable或者提供无参构造器。

父类实现了seriable,则子类序列化时无需实现seriable。

2.serialVersionUID适用于java序列化机制。
简单的说,JAVA序列化的机制是通过 判断类的serialVersionUID来验证的版本一致的。
在进行反序列化时,JVM会把传来的字节流中的serialVersionUID于本地相应实体类的serialVersionUID进行比较。
如果相同说明是一致的,可以进行反序列化,否则会出现反序列化版本一致的异常,即是InvalidCastException。

具体序列化的过程如下:

序列化操作时会把系统当前类的serialVersionUID写入到序列化文件中,
当反序列化时系统会自动检测文件中的serialVersionUID,判断它是否与当前类中的serialVersionUID一致。
如果一致说明序列化文件的版本与当前类的版本是一样的,可以反序列化成功,否则就失败;

可使用idea自动生成uiD(具体过程可百度),比如:private static final long serialVersionUID = 5573832826736049153L;

 

关于json序列化

我发现把类转为json时不需要实现seriable。这让我很疑惑,后来群里有人说将类转为json不算是序列化,我表示赞同,我之所以觉得将类转为json是序列化,是因为中文社区上经常有人说json序列化。

注:

1. 阿里巴巴提供的fastjson,当用json转换实体类时,无get开头的方法,将找不到序列器。
2. java开源的Jackson类,也与get开头的方法有关
注:这里get方法指的是获取到该类成员变量时的getter方法(联想到java bean就懂了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值