Java套接字:接收错误的布尔值

Java套接字:接收错误的布尔值,java,sockets,Java,Sockets,我有一个客户机/服务器架构,它通过套接字发送类实例 在一个类中,我有一个布尔值: public class Survey implements Serializable { private static final long serialVersionUID = -1156493488498723461L; private boolean isExpired; public Survey() { this.isExpired = false; }

我有一个客户机/服务器架构,它通过套接字发送类实例

在一个类中,我有一个布尔值:

public class Survey implements Serializable {
    private static final long serialVersionUID = -1156493488498723461L;
    private boolean isExpired;

    public Survey() {
        this.isExpired = false;
    }

    public void markAsExpired() {
        this.isExpired = true;
    }

    public boolean isExpired() {
        return isExpired;
    }
}
我发送数据包的部分:

survey.markAsExpired();
HashMap<Header, Object> packet = new HashMap<Header, Object>();
packet.put(header, survey);

System.out.println(survey.isExpired()); // prints true
try {
    socketOutput.writeObject(packet);
    socketOutput.flush();
} catch (IOException e) {
    e.printStackTrace();
}
survey.markAsExpired();
HashMap数据包=新的HashMap();
packet.put(标题、调查);
System.out.println(survey.isExpired());//打印正确
试一试{
socketOutput.writeObject(数据包);
socketOutput.flush();
}捕获(IOE异常){
e、 printStackTrace();
}
当我发送布尔值设置为true的类时(见上文),客户机总是将其作为false接收


这是从哪里来的?

我可以通过发送深度副本而不是对象本身来解决问题。解决方法,但已奏效。

您能否共享创建实例并通过套接字发送的代码?@BackSlash Done。您能否创建一个实例来演示问题?一个完整但最小的程序,我们可以运行。@JohnKugelman也有完整的套接字开销?看看你是否可以在没有套接字的情况下重现这个bug。如果您只是在同一个程序中将
ObjectOutputStream
连接到
ObjectInputStream
,会怎么样?