将java对象发送到python并将其接收回

时间:2018-01-18 06:22:13

标签: java python serialization

考虑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,这一切都很好,直到我在LinkedHashMap中通过setAttributeValue()。在Python中我这样做:

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

为此我得到例外:

  

RuntimeError:流中的未知OpCode:0x8(偏移量为0x14C)

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

1 个答案:

答案 0 :(得分: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)