我正在尝试将字节反序列化为go中的一个对象,该对象在java中被序列化为字节,方法如下:
//myMap is an instance of Java TreeMap<String, Object>
ByteArrayOutputStream a = new ByteArrayOutputStream();
GZIPOutputStream b = new GZIPOutputStream(a);
ObjectOutputStream c = new ObjectOutputStream(b);
c.writeObject(myMap);
c.close();
byte[] bytes = a.toByteArray()
下面是我所做的尝试
步骤1-使用解压缩字节(在变量结果中)
//att is the byte array received
buf := bytes.NewBuffer(att)
reader, _ := gzip.NewReader(buf)
defer reader.Close()
result , _ := ioutil.ReadAll(reader)
步骤2-从未压缩字节中读取对象-但失败
var decodedMap map[string]interface{}
d := gob.NewDecoder(bytes.NewBuffer(*result*))
err = d.Decode(&decodedMap)
if err != nil {
panic(err)
}
error = gob: encoded unsigned integer out of range
但是,当我在go中将(字节数组)结果转换为字符串时,我看到了编码的树Map细节和内容
map: �� sr java.util.TreeMap��>-%j� Lt NAMEt JOHNt AGEt 32t LOCODEsr java.lang.Long;���̏#� J valuexr java.lang.Number������ xp y
有人能帮我吗?
1条答案
按热度按时间km0tfn4u1#
您无法(轻松地)在go中反序列化这些Map,因为序列化的数据包含特定于java的数据,这些数据是示例化和初始化原始java类所需的数据(
java.util.TreeMap
在本例中),go应用程序显然不知道这一点。java对象序列化和由实现的编码encoding/gob
与对方无关;前者特定于java,后者特定于go。相反,尝试以一种与语言无关的方式序列化java对象,例如,将其序列化为json,您可以使用go(或任何其他语言)对其进行解码。