浅谈对象的序列化

最近需要用到jedis将对象保存到redis缓存中,查了下api,发现只接收String类型的参数,这样就需要将对象进行序列化了。

那么到底该如何序列化呢?由于好久没有做过这种事儿,一时间没什么思路,想到了toString可以把对象变成String,但是转不回来(除非自己手动解析字符串)。

后来又想到了用ObjectStream,但是直接用这个的时候,反序列时候会报“invalid stream header: EFBFBDEF”的异常。

网上搜了下,大概是由于写入和读出的逻辑不太一致,导致数据反序列化失败(这个应该是jedis或redis自己的问题,不是Java的,后面有时间再细看下,如果有朋友知道细节,欢迎留言)。


目前暂时有以下几种序列化的方法(当然肯定不止这些,暂时写这点,随时补充):

1. ObjectInputStream、ObjectOutputStream

Java自带的工具,在对象与byte数组之间转换,网上资料一大堆,不详细说了。


2. Base64

Java自带的编解码工具,详细路径是java.util.Base64,它主要是将byte数组进行编码和解码。

具体使用方式是:

Base64.getEncoder().endoce(byte);
Base64.getDecoder().decode(byte);

搭配ObjectInputStream和ObjectOutputStream使用:转byte后编码转String保存,读取转byte解密后再反序列化。

这个好处是存储的信息不是明文的,直接看不出来,对于一些略敏感的数据可以使用(当然并没有加密,防君子不防小人)。


3. Json

做web多年竟然忘了这个,真是失败(掩面)

可以将对象进行Json化,常用的有阿里的fastjson和著名的jackson。其中fastjson对一些特殊字符不支持,且存在一些隐藏bug,有些公司不太推荐(使用上倒是方便)。

这个的特点在于存储的信息是明文的,什么都能看到,方便调试和查问题。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值