对象的序列化
之前没有接触过序列化,最近做分布式项目,接触到了好多加了序列化的实体bean。回来小小测试一下,以作记录。
首先我理解的序列化就是将对象转字节,以及字节转对象的反序列化。或者说将实例化的对象转换成二进制字节存储到硬盘上面。
对象想要可被序列化首先要实现Serializable接口,否则是不能被序列化的,会报java.io.NotSerializableException错误,其次还要为序列化的实体类标记唯一标识,否则当我们反序列化的时候将会出问题。
废话不多说上测试代码:
package serializable;
import java.io.Serializable;
public class SerializableBean implements Serializable{
/**
* 测试序列化
*/
private static final long serialVersionUID = 1L;
private Integer i;
/**
* @return the i
*/
public Integer getI() {
return i;
}
/**
* @param i the i to set
*/
public void setI(Integer i) {
this.i = i;
}
}
实现了序列化接口的实体类,并加上了唯一标识。
package serializable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class TestSerializable {
public static void main(String[] args) {
SerializableBean bean = new SerializableBean();
bean.setI(2);
File file = new File("D://b.txt");
try {
ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream(file));
stream.writeObject(bean);
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
ObjectInputStream stream = new ObjectInputStream(new FileInputStream(file));
SerializableBean bean2 = (SerializableBean) stream.readObject();
System.out.println(bean2.getI());
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
简单的写个测试类,没有区分直接写在一起了,测试了一下发现当有唯一 表识serialVersionUID的时候,对象是可以正常反序列化的,且对象的数据在序列化的时候就固定了。但是如果没有这个标示,反序列化就会出问题。
暂时记录这么多,可能的错误在以后来改正和添加。