Java序列化与反序列化
什么是序列化和反序列化 序列化,人话讲就是将对象转换为字节序列(也可以是JSON、XML等文本格式),反序列化就是把这个过程倒置。 下面是维基百科关于序列化的介绍 序列化(serialization)在计算机科学的资料处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。依照序列化格式重新获取字节的结果时,可以利用它来产生与原始对象相同语义的副本。对于许多对象,像是使用大量引用的复杂对象,这种序列化重建的过程并不容易。面向对象中的对象序列化,并不概括之前原始对象所关系的函数。这种过程也称为对象编组(marshalling)。从一系列字节提取数据结构的反向操作,是反序列化(也称为解编组、deserialization、unmarshalling)。 对于Java这种面向对象的编程语言来说,是对实例化后的对象进行序列化,而对于C++这种半面向对象的编程语言来说,序列化的目标不仅有对象(class)还有数据结构(struct) 序列化的使用场景 数据存储:比如序列化可以将存储在 JVM 堆区中的对象转换成字节序列,从而实现持久化。 网络通信:将对象转换为字节序列方便其在网络中进行传递和接收。 使用Java实现序列化 以 JDK 自带序列化方法为例,实现java.io.Serializable接口 @Data public class Cat implements Serializable { private int age; private String name; private Date birth; } 序列化演示: public class serializeTest { public static void main(String[] args) { Cat cat = new Cat(); cat.setName("tom"); cat.setAge(2); cat.setBirth(new Date()); //使用ObjectOutputStream将cat对象序列化并存入test1.txt文件中 try (FileOutputStream fileOutputStream = new FileOutputStream("test1.txt"); ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream)) { objectOutputStream.writeObject(cat); } catch (IOException e) { e.printStackTrace(); } } } 反序列化演示: ...