前言
相信序列化和反序列化在开发中经常用到,javaBean也往往被建议实现Serializable接口,那么到底什么是序列化?为什么实现了Serializable接口就可以进行序列化了?序列化方式有哪些?这些序列化方式各自的优缺点有哪些?这些问题都是本文将探讨的问题。
概念
网上搜索序列化定义往往都是Java对象转换为字节序列的过程,我觉得这个定义不够友好,这次我倒觉得百度百科的定义值得借鉴:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。注意:序列化是保存状态信息,也就是成员变量的值,与对象中的方法无关。
为什么需要序列化和反序列化?
- 本地对象持久化
java平台允许我们创建可复用的java对象(比如单例),但一般情况下,只有当jvm处于运行时,这些对象才可能存在,即这些对象的生命周期不会比JVM的生命周期更长。但现实应用中,就可能要求jvm重启后能继续使用。因此才需要java对象的序列化功能。
- 网络传输对象
在网络中传送对象的字节序列。可以通过序列化把主机A进程上的对象序列化为二进制序列,传输到主机B,B上的进程从二进制序列中反序列化为对象。现在网络传输中用的更多的序列化方式是json序列化和反序列化。而不是jdk自带的序列化方式。
序列化方式有哪些?
JDK提供的通过输出流实现的序列化和输入流实现的反序列化
要序列化对象的类
public class SeriableObject {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {