簡體   English   中英

通過 ObjectOutputStream 發送相同但經過修改的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM