如何将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
相关产品推荐
相关产品推荐

