You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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数组转回字符串即可,不需要用序列化工具:

  1. 从Blob中提取字节数组并转为JSON字符串

    // 注意指定字符集,避免乱码,推荐用UTF_8
    String attributesJson = new String(entity.getAttributes().array(), StandardCharsets.UTF_8);
    
  2. 如果需要转为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:07:10