方案一
1.ObjectMapper类
我们需要将键值对格式的数据写入数据库时,需要将键值对转化为Json字符串格式数据
键值对——>Json字符串
ObjectMapper objectMapper = new ObjectMapper();
String ret = objectMapper.writeValueAsString(需要转化的对象实例);
从数据库取出数据时,将Json字符串类型数据转为键值对格式
Json字符串——>键值对
ObjectMapper objectMapper = new ObjectMapper();
Map map = objectMapper.readValue(argumentsJson,
new TypeReference<HashMap<String,Object>>(){});
当描述复杂数据类型(如集合类map等)转化信息时,需用new TypeReference<>(){},简单数据对象直接写对应类型的类
new TypeReference<转化信息描述>(){}
//Json字符串转为简单数据类型
Toy toy = objectMapper.readValue(argumentsJson,new TypeReference<Toy>(){});
方案二
2.ObjectInputStream和ObjectOutputStream
/****************将对象序列化为byte数组**************************/
//在将对象进行序列化之前,对象必须实现序列化接口implements Serializable
public static byte[] toBytes(Object object) throws IOException {
try(ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
try(ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream)) {
//将object对象序列化为二进制数据到objectOutputStream对象
//又因为objectOutputStream与byteArrayOutputStream对象相关联,因此实际是写入到byteArrayOutputStream
objectOutputStream.writeObject(object);
} catch (IOException e) {
e.printStackTrace();
}
//将byteArrayOutputStream持有的数据取出来转为byte[]
return byteArrayOutputStream.toByteArray();
}
}
/****************将byte[]反序列化为对象**************************/
public static Object fromBytes(byte[] date) throws ClassNotFoundException {
Object object = null;
//将date数组与byteArrayInputStream相关联
try(ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(date)){
try(ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream)){
//从date[]数组中读取数据反序列化为对象
object = objectInputStream.readObject();
}
} catch (IOException e) {
e.printStackTrace();
}
return object;
}