java序列化可以理解为 将数据转化为一个字节序列,并且这些字节流序列可以反转(反序列化)为之前的数据.
常用场景
1.方便传输
举个例子:
网络传输的时候,可以传字符串,亦可以传对象object,例如socket,传字符串的时候接收方很容易解析出来,但是,传一个对象的时候,对方读完字节流后,不知道你传的什么对象,所以没办法给转成原来的对象并解析对象的属性,这时候就要用到序列化和反序列化。
类实现序列化接口,socket发送这个对象的字节流,接收方到流后就可以将流反序列化成对象,然后使用对象的方法和属性。
2.可以用作出错数据、或业务需要保持的数据进行恢复
用法
要继承Serializable接口,Serializable接口没有方法或字段,仅用于标识可序列化的语义
例子:
package com.cla.serializa.test;
import java.io.Serializable;
/**
* 可序列化的类,需要实现Serializable接口
*/
public class DataBean implements Serializable {
private int id;
private String name;
public DataBean() {
System.out.println("无参构造器");
}
public DataBean(int id, String name) {
System.out.println("全参构造器");
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "DataBean's data , id:" + id + ",name:" + name;
}
}
/**
* 序列化工具类
*/
public class Serializations {
/**
* 序列化对象到指定路径文件
* @param outPath 文件路径
* @param outObj 需要序列化的对象
* @throws IOException 当I/O发生异常时
*/
public static void serialize(String outPath, Object outObj) throws IOException {
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream(outPath));
oos.writeObject(outObj);
} finally {
if(oos != null) oos.close();
}
}
/**
* 从文件中逆序列化出对象
* @param inPath 文件路径
* @return 你序列化出的对象
* @throws IOException 当I/O发生异常时
* @throws ClassNotFoundException 当文件中不存在序列化的对象时
*/
public static Object deserialize(String inPath) throws IOException, ClassNotFoundException {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream(inPath));
return ois.readObject();
} finally {
if(ois != null) ois.close();
}
}
}
/**
*写测试(序列化)
*/
public class WriteObject {
public static void main(String[] args) throws IOException {
DataBean data = new DataBean(1,"Tom");
String path = "D:\\xx.txt" ;
Serializations.serialize(path , data);
}
}
/**
*读测试(反序列化)
*/
public class ReadObject {
public static void main(String[] args) throws ClassNotFoundException, IOException {
String path = "D:\\xx.txt" ; // 本地备份的文件路径
Object obj = Serializations.deserialize(path);
System.out.println(obj);
}
}