<分区>
我只是从一本 Java 书上学习网络,所以我有点菜鸟。我在书上和网上都找不到这个问题,所以我决定上网问问。
书上说使用 ObjectOutputStream 和 ObjectInputStream 向不同的控制台发送和接收对象。
现在,我能够成功接收我发送的对象——但只能接收一次。当我发送不同的对象时:随机字符串和整数以及无名实例,控制台具有所有正确的字段。但是,当我发送对象的实例、更改实例字段之一的值并重新发送对象时,inpustream 会加载原始实例的值。
因此,举例来说,我有一个类的实例,其 public int“var”等于 1。如果我发送此类的实例,客户端会收到它并正确报告 var = 1。但是,如果我将 var 更改为 2(在同一个实例中)并重新发送它,客户端将完成调用 read() 方法(因此它一定已经收到新对象!),但它会报告 var 为 1。如果我发送将实例发送给尚未收到该实例的不同客户端,它将正确地将 var 报告为 2,并且即使我更改了 var,它也会继续将其报告为 2。
客户端读取正确版本的实例(如果之前未收到实例)这一事实必须意味着该对象正在通过输出流正确发送;由于某种原因,输入流无法正常工作。它几乎就像它看到它是同一个对象,所以它假设它具有相同的值而不检查。为什么会发生这种情况,我该如何解决?
抱歉,如果我问了一些愚蠢的问题——这本书没有解释序列化和套接字是如何工作的,只是如何使用它们,所以我很可能从根本上对如何使用它们感到困惑。谢谢!
我为测试问题编写的简单代码:
服务器:(有一个定时器 Action 来持续发送更新的对象)
public void actionPerformed(ActionEvent e)
{
object.var++;
output.write(object);
output.flush();
System.out.println(object.var);
}
客户端
public void run()
{
while(true)
{
Test t = (Test)input.readObject();
System.out.println(t.var);
}
}
当这些程序运行时,Server 类的输出是 1,2,3,4... 无限增加,而 Client 类的输出只是 1,1,1,1,1,1,1,etc。
感谢您花时间阅读本文。对不起,如果我只是愚蠢,我是新手。
编辑:抱歉,read() 打错了(我手动输入了代码,因为我无法正确设置格式),我的意思是 input.readObject()