Java中反序列化java.nio.ByteBuffer及Datastax Blob转JSON字符串测试问题
问题分析与解决方法
你遇到的问题核心是用错了反序列化方式——你存储的是JSON字符串的字节数组,而SerializationUtils.deserialize()是用来处理Java序列化对象的字节流的,两者完全不匹配,所以才会抛出StreamCorruptedException。
错误原因拆解
异常里的invalid stream header: 7B226F70其实是十六进制转成ASCII后的{"op,这明显是JSON字符串的开头。而Java序列化的字节流开头固定是AC ED 00 05,所以工具类识别到不是合法的序列化流,直接报错了。
正确的转换步骤
既然你是把JSON字符串转成byte数组存成Blob的,那反向操作直接把byte数组转回字符串即可,不需要用序列化工具:
从Blob中提取字节数组并转为JSON字符串
// 注意指定字符集,避免乱码,推荐用UTF_8 String attributesJson = new String(entity.getAttributes().array(), StandardCharsets.UTF_8);如果需要转为Java对象(可选)
如果你要断言对象的属性,用JSON库(比如Jackson、Gson)把字符串转成对应的实体类即可:// 以Jackson为例 ObjectMapper objectMapper = new ObjectMapper(); YourAttributesPOJO attributes = objectMapper.readValue(attributesJson, YourAttributesPOJO.class); // 执行断言 assertEquals("预期的属性值", attributes.getYourField());
为啥之前的方法不行?
SerializationUtils.deserialize()的作用是还原实现了Serializable接口的Java对象序列化后的字节流,而你存的只是普通JSON字符串的字节,没有经过Java序列化的过程,自然无法被这个工具类解析。
内容的提问来源于stack exchange,提问作者gcpdev-guy
相关产品推荐
相关产品推荐

