java序列化和反序列化相关总结

1、序列化:将对象转成二进制字节或者json等。

2、反序列化:将二进制或者json转成java对象。

要序列化的对象必须实现 Serializable接口,指定随机的一个 serialVersionUID,来对应被序列的对象和这个对象的字节文件。
如果没有明确指定serialVersionUID,序列化的时候会根据字段和特定的算法生成一个serialVersionUID,当属性有变化时这个id发生了变化,所以反序列化的时候就会失败。抛出“本地classd的唯一id和流中class的唯一id不匹配”

-- spring默认使用jackson,可以这样反序列化复杂的集合对象

 Map<String, RuleCacheDTO> ruleMap  = JsonUtil.readJson(parseObject.getString("content"), Map.class, String.class, RuleCacheDTO.class);

   /**
     * 获取泛型的Collection Type
     * @param jsonStr json字符串
     * @param collectionClass 泛型的Collection
     * @param elementClasses 元素类型
     */
    public static <T> T readJson(String jsonStr, Class<?> collectionClass, Class<?>... elementClasses)  {
        ObjectMapper mapper = new ObjectMapper();
        JavaType javaType = mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
        try{
            return mapper.readValue(jsonStr, javaType);
        }catch (JsonParseException e){
        }
       return null;

    }

-- fastjson阿里开源框架

BigDecimal  类型反序列化时要注意,

new BigDecimal(19999999.00001d);这种会出问题

new BigDecimal("19999999.00001");这个正常



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值