从 Python 反序列化 Java 中的对象

我想通过作为 Python(客户端)和 Java(服务器)的套接字从 Python 向 Java 发送一个对象,但是我不能这样做,我只能看到这个:

无效的流标头:8003635F

我尝试使用 Python-Python 和 Java-Java,没有任何不便。我想知道我的代码是错误的还是我忘记了一些东西。我会留意任何回应。 附代码:

Java 代码

public static void main(String[] args) {
        int port = 10002;
        try {
            ServerSocket server = new ServerSocket(port);
            System.out.println("Waiting for clients...");
            Socket client = server.accept();
            System.out.println("Connect: " + client.getInetaddress());
            Vehicle car;
            ObjectInputStream ois = new ObjectInputStream(client.getInputStream());
            car = (Vehicle) ois.readObject();
            System.out.println("Brand: " + car.getBrand() + "Model: " + coche.getModel());
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        } catch (ClassnotFoundException ex) {
            System.out.println(ex.getMessage());
        }
    }
}
class Vehicle implements Serializable {

    private String brand;
    private String model;

    public Vehicle(String brand,String model) {
        this.brand = brand;
        this.model = model;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    @Override
    public String toString() {
        return "Vehicle{" + "brand=" + brand + ",model=" + model + '}';
    }
}

Python 代码

class Vehicle():
    def __init__(self,brand,model):
        self.brand = brand
        self.model = model
        
    def show(self):
        print("Brand: ",self.brand,"\nmodel: ",self.model)

car = Vehicle("Mazda","3") 
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
serverAddress = ("172.16.4.18",10002) 
sock.connect(serverAddress)
sock.send(pickle.dumps(car)) 
sock.close()
icoast 回答:从 Python 反序列化 Java 中的对象

java 和 python 对象之间没有兼容性。您必须使用两种语言都能理解的东西。我会将对象作为 JSON 字符串从 java 发送,并将其作为 JSON 在 python 中摄取,然后将其转换回 python 对象。要将 java 对象转换为 JSON,我发现 this

,

为了补充 Mauricio 的答案,从内存中表示到字节的转换称为编码/序列化/编组。这种编码通常与特定的编程语言相关,读取另一种语言的数据非常困难。

如果您以编码方式传输数据,那么您可能会在很长一段时间内使用当前的编程语言,而且是一个非常糟糕的主意。

因此,当我们想将数据写入文件或通过网络发送时,我们应该将其编码为某种与语言无关的自包含字节序列。流行的选项是 JsonXML

其他流行的二进制编码选项有 BsonBISONMessagepack

本文链接:https://www.f2er.com/43375.html

大家都在问