Objekt som skickas via ObjectOutputStream uppdateras inte?

Java

1 svar · 183 visningar · startad av kallepocket

Medlem sedan sep. 200182 inlägg
Trådstart#1

När jag skickar ett objekt över nätverk (med ObjectOutputStream) går det jättebra första gången, men när servern andra gången skickar exakt samma objekt så följer inga ändringar i objektet med till klienten.

Om jag exv har skapat ett rum med namnet "test1" och skickar det objektet till klienten, och sedan ändrar namnet till "test2" och skickar objektet igen, så kommer klienten inte att få det nya namnet, utan objektet som den mottar ser ut som det "gamla" objektet.

Det verkar som om den bara skickar en referens till objektet när klienten redan har det eller något.

Hur kommer man runt detta?

(Objektet är såklart Serialiazable, och skickas och tas emot med ObjectOutputStrean vs. ObjectInputStream)

/Anders

Medlem sedan sep. 200182 inlägg
#2

Hmm, hittade lösningen själv.

Som jag misstänkte håller både ObjectOutputStream och ObjectInputStream reda på vilka objekt som redan skickats/tagits emot, så de ger bara referensen till det objektet i såna fall.

För att gå runt detta problem måste någon av dem nollställas innan man kan skicka över samma objekt igen. Like this:

final OutputStream out = sock.getOutputStream();
final ObjectOutputStream oout = new ObjectOutputStream(out);

Room room = new Room("hej");

oout.writeObject(room);
oout.flush();

room.setName("hejdå");

//För att skicka det uppdaterade rummet måste oout nollställas

oout.reset();

oout.writeObject(room);
oout.flush();

Så man nollställer alltså med oout.reset() innan man ska skicka objektet på nytt.

255 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)