I am writing a little socket based program. I am using a class ModelEvent to pass information through the socket. inside ModelEvent, there's a variable obect of type (Object).
The object itself is a 2D-array with some values.
object[1][2] = 2;
ModelEvent event = new ModelEvent("allo", object);
dispatchEvent(event);
object[2][3] = 2;
ModelEvent event2 = new ModelEvent("you", object);
dispatchEvent(event2);
Let's say that the array object is filled with the value 1. The first event (event) is received by the client, and the data is right. The second event sent though data is not right. Its data is the same as in the first dispatch. the "allo" and "you" is to see if I'm not reading the same event two times and the answer it's not. The string is right, but the object is not, event if it has been updated. I iterate through the array before sending the second event to see if it is updated on the server side, and it is. But on the client side, it still remain the same as in the first dispatch, even if the event itself is changed.
See
ObjectOutputStream.reset
.Call reset before writing the same object to ensure its updated state is serialized. Otherwise, it will merely use a back reference to the previously written object with its out-dated state.
Or, you could alternatively use
ObjectOutputStream.writeUnshared
as follows.Note it's good practice to couple this with
ObjectInputStream.readUnshared
.I don't see the dispatchEvent code, but from what you wrote I assume the following: you write the same object (only its state changed), this means it will write only the reference twice. you can see in java output stream docs (for performance).
you should use writeUnshared(), which will create a new object on each write
I see reset was suggested, this will get you to the same result, but it has performance impact.