Вероятно, это проблема ObjectOutputStream
.
Если вы используете на сервере один объект ObjectOutputStream
, вам нужно убедиться, что вы вызываете reset
на него, иначе он будет писать общие ссылки на ранее написанные объекты. Это похоже на то, что вы видите.
Чтобы проиллюстрировать проблему:
class BrokenServer {
void sendBrokenVoteData(ObjectOutputStream out) {
out.writeObject(votes);
changeVoteData(votes);
out.writeObject(votes); // Writes a shared reference to "votes" WITHOUT updating any data.
}
}
class FixedServer {
void sendFixedVoteData(ObjectOutputStream out) {
out.writeObject(votes);
changeVoteData(votes);
out.reset(); // Clears all shared references.
out.writeObject(votes); // Writes a new copy of "votes" with the new data.
}
}