在C ++中访问Java byte []

时间:2011-06-09 20:54:21

标签: java c++ byte

我有一个Java应用程序,它将byte []结构持久化到DB(使用Hibernate)。我正在编写一个C ++应用程序,以便稍后读取这些结构。

正如您所料,我遇到了问题....写入数据库的byte []结构比原始字节数长27个字节,看起来很像。

有没有办法确定(在C ++中)byte []标头结构,以正确找到真实数据的开头?

我花了一些时间查看JNI源代码(GetArrayLength(jbytearray)等)以确定它是如何工作的,但很快陷入了JVM代码的变幻莫测之中。呸...

想法?

1 个答案:

答案 0 :(得分:4)

可能正在使用Java Object Serialization Protocol对象进行序列化。您可以通过在开头查找幻数0xACED来验证这一点。如果是这种情况,它只是包含有关类和长度的一些元信息,您可以轻松地解析最后的实际字节值。

特别是,您会看到0xAC 0xED 0x00 0x05标题后跟一个 classDesc 元素,该元素将是0x75 ...bytes... 0x70,后跟4字节长度,然后是字节他们自己。 Java以big-endian格式序列化长度和其他多字节值。