定义java实体类时为什么继承Serializable接口
Serializable接口:一个对象序列化的接口,一个类只有实现了Serializable接口,他的对象才能够被序列化
序列化?序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
反序列化
什么情况下需要序列化:当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化。
为什么要继承Serialilzable。因为存储对象在存储介质中,以便在下次使用的时候,可以很快捷的重建一个副本。我们日常将数据存储在mysq等数据库中,为什么非要序列化才能存储?因为Serializable接口实际上就是一个标识的接口。在java中起到传递信息给jvm的,通知jvm,这个类我就不做序列化了,由jvm来帮我序列化Serializable接口就是java提供用来进行高效率的异地共享实例对象的机制,实现这个接口即可。
实体类写入到文件中,然后从文件中进行恢复,恢复后得到的内容和之前完全一样。其中有一个起到很大作用的变量叫做SerialVersionUID。这个serialVersionUID的详细的工作机制是:在序列化的时候系统将serialVersionUID写入到序列化的文件中去,当反序列化的时候系统会先去检测文件中的serialVersionUID是否跟当前的文件的serialVersionUID是否一致,如果一直则反序列化成功,否则就说明当前类跟序列化后的类发生了变化,比如是成员变量的数量或者是类型发生了变化,那么在反序列化时就会发生crash,并且回报出错误。
Java 集合 序列化HashMap
HashMap
类默认是序列化的,这意味着我们不需要实现Serializable
接口,以使其符合序列化的条件。在本教程中,我们将学习如何编写HashMap
对象及其内容到文件和如何从文件中读取HashMap
对象。在分享完整代码之前,让我简单介绍一下序列化和反序列化。
序列化:这是一个将Object
与其属性和内容一起写入文件的过程。它在内部以字节流转换对象。
反序列化:这是一个从文件中读取Object
及其属性以及Object
内容的过程。
1 public class AjaxResult extends HashMap<String, Object>
2 {
3 private static final long serialVersionUID = 1L;
4
5 /** 状态码 */
6 public static final String CODE_TAG = "code";
7
8 /** 返回内容 */
9 public static final String MSG_TAG = "msg";
10
11 /** 数据对象 */
12 public static final String DATA_TAG = "data";
13
14 /**
15 * 状态类型
16 */
17 public enum Type
18 {
19 /** 成功 */
20 SUCCESS(0),
21 /** 警告 */
22 WARN(301),
23 /** 错误 */
24 ERROR(500);
25 private final int value;
26
27 Type(int value)
28 {
29 this.value = value;
30 }
31
32 public int value()
33 {
34 return this.value;
35 }
36 }