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就懂了)