在android上使用messagepack,可以序列化/反序列化一个类,但不是绝对正确的
简单的测试类:
@Message
public class Account {
public String Code;
public int Sequence;
public float Lot;
public String toString(){
return "Seq:"+Sequence;
}
}
测试代码:
MessagePack msgpack = new MessagePack();
msgpack.register(Account.class);
try {
Account a = new Account();
a.Code ="name";
a.Sequence = 105;
a.Lot = (float)1.05;
byte[] b = msgpack.write(a);
//byte[] c = MessagePack.pack(a);
Account aa = msgpack.read(b, Account.class );
System.out.println(new String(b));
System.out.println("test00: aa.Lot "+aa.Lot);
}catch(IOException e){
e.printStackTrace();
}
运行后" byte [] b = msgpack.write(a);"在android上输出字节数组b []不正确(与java相比)
[-109, -92, 110, 97, 109, 101, 105, -54, 63, -122, 102, 102] on java
[-109, -92, 110, 97, 109, 101, -54, 63, -122, 102, 102, 105] on android
答案 0 :(得分:1)
MessagePack本质上不是一个对象序列化器。它旨在序列化定义明确的数据结构。在Java中,对象的字段之间没有顺序概念。这些MessagePack实现可能会引入一个,以便它们可以序列化和反序列化对象,但不能保证它们在不同的机器上是相同的。
如果解压缩字节数组,以下是它们实际包含的内容:
["name", 105, 1.05] on Java
["name", 1.05, 105] on Android
如果要以可移植的方式序列化对象,请编写具有明确定义的成员顺序的特定序列化方法,或使用与对象更紧密对应的地图类型。
请注意,这是一个报告的错误:http://jira.msgpack.org/browse/MSGPACK-51
答案 1 :(得分:0)