我有一个Java应用程序,它将byte []结构持久化到DB(使用Hibernate)。我正在编写一个C ++应用程序,以便稍后读取这些结构。
正如您所料,我遇到了问题....写入数据库的byte []结构比原始字节数长27个字节,看起来很像。
有没有办法确定(在C ++中)byte []标头结构,以正确找到真实数据的开头?
我花了一些时间查看JNI源代码(GetArrayLength(jbytearray)等)以确定它是如何工作的,但很快陷入了JVM代码的变幻莫测之中。呸...
想法?
答案 0 :(得分:4)
可能正在使用Java Object Serialization Protocol对象进行序列化。您可以通过在开头查找幻数0xACED来验证这一点。如果是这种情况,它只是包含有关类和长度的一些元信息,您可以轻松地解析最后的实际字节值。
特别是,您会看到0xAC 0xED 0x00 0x05
标题后跟一个 classDesc 元素,该元素将是0x75 ...bytes... 0x70
,后跟4字节长度,然后是字节他们自己。 Java以big-endian格式序列化长度和其他多字节值。