1.序列化
使用此方法进行序列化的对象必须实现Serializable接口,不然在进行序列化时会抛出NotSerializableException异常。
public static byte[] toBytes(Serializable obj) throws IOException {
try(ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
){
objectOutputStream.writeObject(obj);
return byteArrayOutputStream.toByteArray();
}
}
ObjectOutputStream的writeObject方法将对象序列化后写入一个字节流中,而这个字节流就是在初始化ObjectOutputStream对象时传入的字节流,这里使用ByteArrayOutputStream,可以获取到字节流中的字节数组。
2.反序列化
对应序列化,反序列化应该是将字节数组转化为对象。
public static Serializable toObj(byte[] bytes) throws IOException, ClassNotFoundException {
try(ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
){
Object o = objectInputStream.readObject();
return (Serializable) o;
}
}
ByteArrayInputStream将字节数组转化为字节流。而ObjectInputStream的readObject方法将字节流转化为对象。