私の側のバグまたは誤解を示す次のコードがあります。
同じリストを送信しましたが、ObjectOutputStream を変更しました。1 回は [0]、それ以外は [1] です。しかし、読んでみると [0] が 2 回出てしまいます。これは、同じオブジェクトを送信していて、ObjectOutputStream が何らかの方法でそれらをキャッシュしている必要があるという事実が原因だと思います。
これは正常に機能しますか、それともバグを報告する必要がありますか?
java.io.* をインポートします。
java.net.* をインポートします。
import java.util.*;
公開クラス OOS {
public static void main(String[] args) throws Exception {
スレッド t1 = 新しいスレッド (新しい Runnable() {
public void run() {
試す {
ServerSocket ss = 新しい ServerSocket(12344);
ソケット s= ss.accept();
ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
同じリスト = 新しい ArrayList();
同じ.追加(0);
oos.writeObject(同じ);
同じ.clear();
同じ.add(1);
oos.writeObject(同じ);
キャッチ(例外e){
e.printStackTrace();
}
}
});
t1.start();
Socket s = new Socket("localhost", 12344);
ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
// 期待どおり [0] を出力します
System.out.println(ois.readObject());
// 出力は [0] ですが、期待されるのは [1] です
System.out.println(ois.readObject());
System.exit(0);
}
}