您的位置:首页 > 汽车 > 时评 > java反序列化redis中的java对象

java反序列化redis中的java对象

2024/9/19 15:59:07 来源:https://blog.csdn.net/lovepeacee/article/details/140441572  浏览:    关键词:java反序列化redis中的java对象

此代码实现了从redis获取到的二进制数据转换成java对象的过程, 前提是redis中存储的是java序列化之后的java对象


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.apache.shiro.session.mgt.SimpleSession;import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.util.Map;
import java.util.concurrent.ConcurrentLinkedDeque;public class DeserializeBinaryData {public static void main(String[] args) {try {// 二进制字符串,去掉空格后转换为字节数组(从redis中获取的二进制数据)String binaryString = "1010110011101101000000000000010101110011011100100000000000...";binaryString = binaryString.replace(" ", ""); // 移除空格byte[] binaryData = new byte[binaryString.length() / 8];// 将二进制字符串转换为字节数组mp-hessfor (int i = 0; i < binaryData.length; i++) {// 每8位二进制数转换为一个字节String byteString = binaryString.substring(i * 8, (i * 8) + 8);binaryData[i] = (byte) Integer.parseInt(byteString, 2);}// 使用ByteArrayInputStream和ObjectInputStream进行反序列化ByteArrayInputStream bis = new ByteArrayInputStream(binaryData);ObjectInputStream ois = new ObjectInputStream(bis);Object obj = ois.readObject();System.err.println(obj.getClass());if (obj instanceof ConcurrentLinkedDeque){ConcurrentLinkedDeque obj1 = (ConcurrentLinkedDeque) obj;System.err.println(JSON.toJSONString(obj1));}else{SimpleSession obj1 = (SimpleSession) obj;Map<Object, Object> attributes = obj1.getAttributes();System.err.println(JSON.toJSONString(attributes, SerializerFeature.PrettyFormat));// 打印反序列化的对象System.out.println("反序列化的对象: " + obj);}ois.close();bis.close();} catch (Exception e) {e.printStackTrace();}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com