1

我的代码中有一个非常奇怪的情况,我不明白我正在发送一个对象让我们通过套接字说 O 然后我正在更改对象中变量的值并再次发送它,但是第二次当我打印它时在客户端,我得到的值与第一个对象中的值相同。

客户端代码:

 while(true){
             try{
             order=(Order)ois.readObject();

            System.out.println(order);

             }

服务器代码:

public void sendOrder(Order o){
    try {
        out.writeObject(o);

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

主要方法:

Server_Socket ss=new Server_Socket();
    ss.sendOrder(o);
    o.add(r2);
    ss.sendOrder(o);

在我发送之前,服务器端的值肯定会发生变化,但我不明白为什么在客户端它没有显示 r2 添加到对象中。

4

2 回答 2

5

对象正在被ObjectOutputStream. 为防止这种情况,请ObjectOutputStream.reset()在每次写入后调用。如果您要发送不包含其他对象的简单对象,请writeUnshared()使用writeObject().

于 2012-09-26T01:46:29.280 回答
0

IOStreams 正在缓存对象。要解决此问题,请在发回对象之前在服务器上创建一个深度克隆。当客户端从流中拉取对象时,它会有一个不同的实例 id,它实际上会在客户端反序列化和实例化对象。

好玩的东西。

于 2012-09-26T01:44:32.730 回答