socket编程序列化对象

yah*_*ahh 1 java sockets serialization

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

客户代码:

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

            System.out.println(order);

             }
Run Code Online (Sandbox Code Playgroud)

服务器代码:

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

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

主要方法:

Server_Socket ss=new Server_Socket();
    ss.sendOrder(o);
    o.add(r2);
    ss.sendOrder(o);
Run Code Online (Sandbox Code Playgroud)

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

use*_*421 5

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

  • @AlexLynch不,不是"Java的方式告诉你,编写可变对象并不是超级好的做法".这是Java实现对象序列化规范的方式,它提供了正确传输对象图,包括循环图.如果没有某种"处理"系统来记住已经传输的内容并且植物处理这些对象而不是重新传输它们,就不可能实现这一点. (2认同)