首先数据库存储一个Object对象,需要在数据库表中定义一个blob类型的字段
与数据库对应的实体类
编写一个操作二进制的工具类
import java.io.*;
/**
* byte[]类型操作类
*/
public class BlobUtil {
/**
* 把object对象序列化为二进制字节数组
* @param object
* @return
*/
public static byte[] setObject(Object object) {
ByteArrayOutputStream baos = null;
ObjectOutputStream out = null;
try {
baos = new ByteArrayOutputStream();
out = new ObjectOutputStream(baos);
out.writeObject(object);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (baos != null) {
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return baos.toByteArray();
}
/**
* 把二进制字节数组反序列化为object对象
* object当中的每个javaBean对象都必须实现序列化
* 最外层的类必须生成一个序列化ID
* @param bytes
* @return
*/
public static Object getObject(byte[] bytes) {
Object obj = null;
ByteArrayInputStream bais = null;
ObjectInputStream in = null;
try {
bais = new ByteArrayInputStream(bytes);
in = new ObjectInputStream(bais);
obj = in.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bais != null) {
try {
bais.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return obj;
}
}
需要转换为byte[]的对象必须实现序列化和生成一个序列化ID,生成一个序列化ID是为了解决类当中一但有修改,反序列化时序列化ID就会对应不上,如下图:
类中如果有其他类为变量也需要实现序列化,否则从数据库中取出数据然后反序列化成Object对象的时候会直接报错
调用二进制工具类来转换数据然后进行存取就可以了。