gpt4 book ai didi

android - Android 上的 MessagePack 序列化对象错误

转载 作者:太空狗 更新时间:2023-10-29 14:25:37 26 4
gpt4 key购买 nike

在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

我有评论Using MessagePack with Android

最佳答案

MessagePack 本质上不是对象序列化程序。它旨在序列化定义明确的数据结构。在 Java 中,对象的字段之间没有顺序的概念。这些 MessagePack 实现可能会引入一个,以便它们可以序列化和反序列化对象,但不能保证它在不同的机器上是相同的。

如果你解压你的字节数组,下面是它们实际包含的内容:

["name", 105, 1.05] on Java
["name", 1.05, 105] on Android

如果你想以可移植的方式序列化一个对象,编写一个特定的序列化方法,为成员定义明确的顺序,或者使用映射类型,它更接近于一个对象。

请注意,这是一个已报告的错误:http://jira.msgpack.org/browse/MSGPACK-51

关于android - Android 上的 MessagePack 序列化对象错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12926081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com