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

如何将SQL VARBINARY列中存储的Java Properties对象转为可读格式?

你看到的乱码是Java对象序列化后的二进制数据,并非普通文本,直接转VARCHAR自然无法读取。以下是可行的解决方法:

解决方法

1. 用Java程序反序列化(最可靠通用)

Java序列化的对象只能通过Java反序列化来还原成Properties实例,具体步骤:

  • 从数据库查询出varbinary列的字节数组
  • 使用ObjectInputStream读取字节流,反序列化为Properties对象
  • 遍历输出键值对即可得到可读内容

示例代码:

import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.util.Properties;

public class PropertiesDeserializer {
    public static void main(String[] args) {
        // 替换为从数据库获取的varbinary字节数据
        byte[] binaryProps = ...;

        try (ByteArrayInputStream bais = new ByteArrayInputStream(binaryProps);
             ObjectInputStream ois = new ObjectInputStream(bais)) {

            Properties properties = (Properties) ois.readObject();
            // 打印所有键值对
            properties.forEach((key, value) -> System.out.printf("%s = %s%n", key, value));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. 临时提取简单键值对(仅适用于特殊场景)

从你给出的示例乱码中,可以看到类似ttot9999.99tfromt0.0的片段,这是Java序列化时存储的字符串键值对(t是字符串类型标记)。手动提取可按t分割字符串,取偶数索引项作为key,奇数索引项作为value:

  • 分割后得到数组:["", "tot", "9999.99", "from", "0.0"]
  • 对应可读键值对:tot=9999.99、from=0.0

这种方法只能处理纯字符串的简单键值对,一旦包含特殊字符或复杂类型就会失效,仅作为临时应急方案。

内容的提问来源于stack exchange,提问作者Pedro Fernandes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:05:21