(java) ObjectInputStream desserializando a versão incorreta do objeto [duplicate]

Esta pergunta já tem uma resposta aqui:

Soquete / serialização Java, o objeto não é atualizado 2 respostas

Estou apenas aprendendo a trabalhar em rede a partir de um livro em java, então sou meio noob. Não encontrei esse problema no livro ou on-line, então decidi perguntar pela internet.

O livro diz para usar o ObjectOutputStream e ObjectInputStream para enviar e receber objetos para diferentes console

Agora, sou capaz de receber com êxito os objetos que envio - mas apenas uma vez. Quando envio objetos diferentes: seqüências aleatórias e Inteiros e instâncias sem nome, o console possui todos os campos corretos. Mas quando envio uma instância de um objeto, altero o valor de um dos campos da instância e reenvio o objeto, e o inpustream carrega os valores da instância origina

Então, digamos, por exemplo, eu tive uma instância de uma classe com um público int "var" igual a 1. Se eu enviar a instância dessa classe, o cliente a recebe e informa corretamente que var = 1. No entanto, se eu altere var para 2 (na mesma instância) e reenvie-o, o cliente terminará de chamar o método read () (portanto, ele deve ter recebido o novo objeto!), mas relatará var como sendo 1. Se eu enviar a instância para um cliente diferente que ainda não recebeu a instância, ela reportará corretamente var como 2 e continuará relatando como 2, mesmo se eu alterar var.

O fato de o cliente ler a versão correta da instância, caso não a tenha recebido antes, significa que o objeto está sendo enviado corretamente pelo fluxo de saída; por alguma razão, o fluxo de entrada simplesmente não está funcionando. É quase como se ele visse que é o mesmo objeto e, portanto, assume que possui os mesmos valores sem verificar. Por que isso acontece e como posso corrigi-lo?

Desculpe se estou perguntando algo estúpido - o livro não explica como a serialização e os soquetes funcionam, apenas como usá-los, então eu poderia muito bem estar fundamentalmente confuso sobre como usá-los. Obrigado

ódigo simples que escrevi para testar o problem

Server: (possui uma ação de timer para continuar enviando objetos atualizados)

    public void actionPerformed(ActionEvent e)
{
    object.var++;
            output.write(object);
            output.flush();
            System.out.println(object.var);
}

Client

    public void run()
{
    while(true)
            {
                   Test t = (Test)input.readObject();
                   System.out.println(t.var);
            }
    }

Quando esses programas executam a saída para a classe Server é 1,2,3,4 ... aumentando infinitamente, enquanto a saída do Cliente é apenas 1,1,1,1,1,1,1, etc.

Obrigado por separar um tempo para ler isso. Desculpe se estou apenas sendo burro, sou novo nessas coisas.

EDIT: Desculpe, o read () era um erro de digitação (digitei manualmente o código porque não consegui fazer a formatação correta), quis dizer input.readObject ()

questionAnswers(3)

yourAnswerToTheQuestion