webForumDet fria alternativet

Objekt som skickas via ObjectOutputStream uppdateras inte?

1 svar · 175 visningar · startad av kallepocket

kallepocketMedlem sedan sep. 200182 inlägg
#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

kallepocketMedlem 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.

130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)