首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >套接字编程序列化对象

套接字编程序列化对象
EN

Stack Overflow用户
提问于 2012-09-26 09:22:53
回答 2查看 156关注 0票数 1

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

客户端代码:

代码语言:javascript
复制
 while(true){
             try{
             order=(Order)ois.readObject();

            System.out.println(order);

             }

服务器代码:

代码语言:javascript
复制
public void sendOrder(Order o){
    try {
        out.writeObject(o);

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

main方法:

代码语言:javascript
复制
Server_Socket ss=new Server_Socket();
    ss.sendOrder(o);
    o.add(r2);
    ss.sendOrder(o);

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-26 09:46:29

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

票数 5
EN

Stack Overflow用户

发布于 2012-09-26 09:44:33

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

有趣的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12593310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档