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

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

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

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

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

 Map 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 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");这个正常



你可能感兴趣的:(java序列化和反序列化相关总结)