序列化之JAVA原生序列化

JAVA原生序列化

在做redis缓存的时候,考虑到对象直接序列化为byte[],中间节省了转化为json字符串的一步,能提高一点效率,最开始考虑的就是Java内置序列化方案,那么下面直接上代码,一个序列化工具类

public class JavaSerializerUtil {

    public static <T> byte[] serialize(T obj) {
        byte[] bytes = null;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ObjectOutputStream sOut;
        try {
            sOut = new ObjectOutputStream(out);
            sOut.writeObject(obj);
            sOut.flush();
            sOut.close();
            bytes = out.toByteArray();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bytes;
    }

    public static <T> T deserialize(byte[] bytes) {
        if (bytes == null) {
            return null;
        }
        T t = null;
        ByteArrayInputStream in = new ByteArrayInputStream(bytes);
        ObjectInputStream sIn;
        try {
            sIn = new ObjectInputStream(in);
            t = (T) sIn.readObject();
            sIn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return t;

    }
}
  1. Java Object Serialize,java原生方法不依赖外部类库,序列化后byte[]字节数比较大,不能跨语言
  2. 对象需要实现实现Serializable,序列化接口的对象并不强制声明唯一的serialVersionUID,是否声明serialVersionUID对于对象序列化的向上向下的兼容性有很大的影响,其实就是在添加或修改对象属性的时候,反序列化会报错。
  3. 序列化后会存储对象的很多信息,导致效率慢,内容多。

还有一个重要的,如果是使用jdk1.8 ,使用OffsetDateTime,LocalDateTime等类型的属性,原生序列化天然支持,如果使用jackson、hessian等,可能需要自己实现序列化器,比较麻烦。

下一张来讲hessian序列化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值