如何反序列化javaMap

sbdsn5lh  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(479)

我正在尝试将字节反序列化为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

有人能帮我吗?

km0tfn4u

km0tfn4u1#

您无法(轻松地)在go中反序列化这些Map,因为序列化的数据包含特定于java的数据,这些数据是示例化和初始化原始java类所需的数据( java.util.TreeMap 在本例中),go应用程序显然不知道这一点。java对象序列化和由实现的编码 encoding/gob 与对方无关;前者特定于java,后者特定于go。
相反,尝试以一种与语言无关的方式序列化java对象,例如,将其序列化为json,您可以使用go(或任何其他语言)对其进行解码。

相关问题