【问题标题】:Sending java object to python and receive it back将java对象发送到python并接收它
【发布时间】:2018-01-18 06:22:13
【问题描述】:

考虑 java 中实现Serializable 的对象。我想将该对象发送到 TCP 套接字上的 python 代码。我正在序列化对象并使用 TCP 发送:

//socket connection code
PySessionObject object = new PySessionObject();
object.setMethodCall(PyServerMethodConstant.SETATTRIBUTE);
object.setAttributeName(name);          
object.setAttributeValue(value);// value is of object type which also  implements Serializable  
os = sChannel.socket().getOutputStream();       
oos = new ObjectOutputStream(os);
oos.writeObject(object);
oos.flush();
os.flush();
//socket closing and exception handling

现在我想在python中将此字节流转换为对象对该对象执行一些操作并将其发送回java世界并再次反序列化它。为此,我来到了javaobj-py3,这一切都很好,直到我在setAttributeValue() 中通过LinkedHashMap。在 Python 中,我正在这样做:

total_data=b''
    while True:            
        data = self.clientsocket.recv(8192) 
        if not data: break
        total_data += data
pyobj = javaobj.loads(total_data)

为此,我得到了例外:

RuntimeError: Unknown OpCode in the stream: 0x8 (at offset 0x14C)

会是什么原因?是不是“某事”找不到操作码?是否有人可以提出任何其他想法,将从 java 发送的字节流转换为 python 世界中的对象对该对象执行一些操作并将其发送回 java 世界并再次反序列化。

【问题讨论】:

    标签: java python serialization


    【解决方案1】:

    您可以将对象转换为 JSON 字符串,然后通过网络发送。

    将对象转换为json

    new GSONBuilder().create().toJSON(obj);
    

    将 json 转换为对象

    new GSONBuilder().create().fromJSON(jsonString, YouObject.class);
    

    我更喜欢使用GSON 将对象转换为json 并在java 中反转。在 python 中,您可以使用 json 库。方法是 json.loads(string)json.dumps(object)

    【讨论】:

    • 在尝试解释的方法之前,我已经尝试过这种方法。这种方法的问题是,如果我将 jsonstring 传递给 fromJSON(),那么当我在传递的对象中访问并键入 cast attributeValue 字段时,就会发生 typecastexception。
    猜你喜欢
    • 1970-01-01
    • 2013-01-05
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    相关资源
    最近更新 更多