[英]Sending the same but modifed object over ObjectOutputStream
我有以下代碼顯示了我的錯誤或誤解。
我發送了相同的列表,但通過 ObjectOutputStream 進行了修改。 一次為 [0],其他為 [1]。 但是當我閱讀它時,我得到了兩次 [0]。 我認為這是因為我發送的是同一個對象,並且 ObjectOutputStream 必須以某種方式緩存它們。
這是應該的工作,還是應該提交錯誤?
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); } }
流有一個參考圖,所以一個被發送兩次的對象不會在另一端給出兩個對象,你只會得到一個。 並且分別發送相同的對象兩次會給您兩次相同的實例(每個都具有相同的數據 - 這就是您所看到的)。
如果要重置圖形,請參閱 reset() 方法。
Max 是正確的,但您也可以使用:
public void writeUnshared(Object obj);
請參閱下面的評論以獲取警告
我不知道我發布了這個,因為我必須問我的問題,stackoverflow 說可以解決任何一個問題。對不起,兄弟
我有以下代碼顯示了我的錯誤或誤解。
我發送了相同的列表,但是在ObjectOutputStream上進行了修改。 一次為[0],其他為[1]。 但是當我閱讀它時,我得到[0]兩次。 我認為這是由於我在同一對象上發送而ObjectOutputStream必須以某種方式對其進行緩存而造成的。
這項工作是否應該進行,還是應該提交錯誤?
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); } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.