Mam następujący kod, który pokazuje błąd lub nieporozumienie z mojej strony.Wysyłanie tego samego, ale zmodyfikowanego obiektu przez ObjectOutputStream
Wysłałem tę samą listę, ale zmodyfikowaną przez obiekt ObjectOutputStream. Raz jako [0] i inne jako [1]. Ale kiedy to przeczytam, otrzymuję [0] dwa razy. Myślę, że jest to spowodowane faktem, że wysyłam ten sam obiekt i ObjectOutputStream musi je jakoś buforować.
Czy to działa tak, jak powinno, czy powinienem zgłosić błąd?
import java.io.*; import java.net.*; import java.util.*; public class OOS { public static void main(String[] args) throws Exception { Thread t1 = new Thread(new Runnable() { public void run() { try { ServerSocket ss = new ServerSocket(12344); Socket s= ss.accept(); ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream()); List same = new ArrayList(); same.add(0); oos.writeObject(same); same.clear(); same.add(1); oos.writeObject(same); } catch(Exception e) { e.printStackTrace(); } } }); t1.start(); Socket s = new Socket("localhost", 12344); ObjectInputStream ois = new ObjectInputStream(s.getInputStream()); // outputs [0] as expected System.out.println(ois.readObject()); // outputs [0], but expected [1] System.out.println(ois.readObject()); System.exit(0); } }
Nie, to nie rozwiązało, Max miał rację, używaj resetowania() – Pyrolistical
To nie działa. 'flush()' nie ma przypisanych tutaj magicznych właściwości. – EJP