【发布时间】:2017-10-28 20:40:30
【问题描述】:
我有关系,每条记录都有 BYTEA 列 (UTF-8) 按以下顺序编码 3 个数字:
字节 0-1:数字 1
字节 2-3:数字 2
字节 4-6:数字 3
如何将二进制数据解析为可读数字?
目前我有这个,不知道如何继续:
Class.forName(dbDriver);
Connection connection = DriverManager.getConnection(dbUrl, dbUser, dbPass);
Statement st = connection.createStatement();
String query = "SELECT ...";
ResultSet rs = st.executeQuery(query);
while (rs.next()) {
byte[] data = rs.getBytes(1);
//TODO Parse
}
谢谢,
【问题讨论】:
-
您似乎使用了两次字节 4。我认为这是一个错字,数字 3 来自字节 5-6,而不是 4-6,即 2 个字节长,与数字 1 和 2 相同。
-
@Andreas 嗨,我的错。我编辑了。前2个是2个字节,第三个是3个字节,可以是负数。
-
如果只有第三个数字可以是负数,那么你确实需要更好地定义数字格式。例如。数字是以二进制存储的吗?如果是,签名号码是否存储在two's complement 中?还是符号本身存储为一个字节?如果不是二进制,数字是否存储为文本?或BCD(打包或解包)?还是别的什么?
-
@Andreas 不幸的是,我在规范中没有所有这些信息。这里有一个常见的做法吗?
-
不带3字节数字,不,没有通用的做法。我建议您获取一些
byte[7]值的示例,然后查看字节。如果示例还显示了它们代表的 3 个数字,则会有所帮助。
标签: java postgresql jdbc blob bytea