getDeclaredFields 方法返回的 Field 列表顺序和我们在类里面定义的不一样。它是做过字母排序的。
我们知道 Protobuf 的序列化中所需要的 Schema 是对类下面的 Field 顺序强依赖的。
而在我们的Server端的调式中, 我们发现我们的Field顺序是和我们在类中定义的是一样的。
JDK 1.6 以上这个顺序才保证是和类定义中的顺序是一致的,而在早期版本中这个顺序是没保证的,是根据各 JDK 的实现自己做的。也就是说 ProtostuffRuntime 其实只能保证在 JDK1.6 以上能正确运行。 更别说 Android 这样的非正统的 JVM 系统了。
问题找到了,那怎么解决呢?
c_str()
函数返回一个指向正规C字符串的指针, 内容与本string串相同,这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
清除 JVM 中的 DNS 的缓存 >>查看全文