有的时候我们想将对象保存到数据库中,就需要将对象序列化为二进制数组,然后保存到数据库。
从数据库提取出二进制数组,还需要将其还原为对象。
本例中ArrayList已经implements Serializable,其他对象需要实现此接口才能序列化
1、从ArrayList序列化为二进制数组
/**
* 将ArrayList转化为二进制数组
*
* @param list
* ArrayList对象
* @return 二进制数组
*/
private byte[] getImageSpanInfoBytesFromObject(ArrayList<ImageSpanInfo> list) {
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
try {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(
arrayOutputStream);
objectOutputStream.writeObject(list);
objectOutputStream.flush();
byte[] data = arrayOutputStream.toByteArray();
objectOutputStream.close();
arrayOutputStream.close();
return data;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
2、从byte[]还原ArrayList
/**
* 从二进制数组转换Arrayist对象
* @param bytes 二进制数组
* @return ArrayList返回对象
*/
private ArrayList<ImageSpanInfo> getImageSpanInfoListFromBytes(byte[] bytes) {
ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(bytes);
try {
ObjectInputStream inputStream = new ObjectInputStream(
arrayInputStream);
ArrayList<ImageSpanInfo> list = (ArrayList<ImageSpanInfo>) inputStream
.readObject();
inputStream.close();
arrayInputStream.close();
return list;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
上述的前提是需要ArrayList的item已经实现了Serializable,否则会报出java.io.NotSerializableException
public class ImageSpanInfo implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
public String path;
public int start;
public int end;
}