关于序列化与反序列化的认识

当前台传递给我们一个对象数组的时候,我们该怎样将之存储到数据库里?

这个时候最常使用的方法就是:将对象数组转换成格式相同的字符串,以String字段接收存储到数据库里面;使用时,再转换回去。

而这里面的“转换”,就是“序列化”。

序列--字面意义上来说就是将不规则的格式规则化,成为方便有序的列值。

以下是图画例子:

假设前台以这种格式传过来一些数据,我们接下来就要将它序列化为字符串进而完成存储。

 要想完成序列化,推荐使用

ObjectMapper objectMapper = new ObjectMapper();

这个objectMapper对象你可以理解为:一个操作对象于数据库与java的中间层。然后接下来,使用

String serializedMapString = objectMapper.writeValueAsString(封装好的数据对象,可以是map也可以是实体类);

完成序列化。这样我们就已经得到了与前台传递过来的数据格式相同的一串字符串了,如下

[{"id":100,"name":"Lucy","duty":"上午","number":20,"status":0,"remarks":"备注"},{"id":200,"name":"Lucy001","duty":"上午","number":50,"status":0,"remarks":"备注"}]

进行反序列化的过程也很简单,只需要实现一个方法,如下

objectMapper.readValue(adminScheduling.getSchedule(), new TypeReference<想序列化成为的格式,如:List<String, Object>() {})

建议使用ObjectMapper,如果只是序列化为字符串不要求格式的话,转成字节数组会产生非常大的存储量。

try {
    // 序列化 Map 对象到字节数组
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    ObjectOutputStream objectStream = new ObjectOutputStream(byteStream);
    objectStream.writeObject(map-存到map里面);
    objectStream.close();
    byte[] serializedMap = byteStream.toByteArray();

    // 将字节数组转换为字符串
    String serializedMapString = Base64.getEncoder().encodeToString(serializedMap);
    System.out.println(serializedMapString);
} catch (IOException e) {
    e.printStackTrace();
}

不建议使用!

 

posted @   xiaobaibao  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示