オブジェクトをシリアライズしていますので、簡単かつ迅速にネットワーク経由でオブジェクトを送信できます。これには大きな問題が1つあります。私の配列の値を初期化した後、その配列の直列化されたオブジェクトは常に初期化された数のままです。私はこれが本当であるかどうかもわかりません。なぜなら、intのデフォルト値が0であることは間違いないと思います。私はそれを0に変更するのではなく、そのままにしますか?int配列の値を初期化した後、配列への更新はシリアルに存在しません
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
FileOutputStream ostr = new FileOutputStream(new File("ObjectFile.yeh"));
FileInputStream istr = new FileInputStream(new File("ObjectFile.yeh"));
ObjectOutputStream out= new ObjectOutputStream(ostr);
int[] hi = new int[5];
hi[0]=3;
out.writeUTF("This is an Array");
out.writeObject(hi);
hi[0]=5;
out.writeObject(hi);
out.writeUTF("Array Over");
out.close();
ObjectInputStream in = new ObjectInputStream(istr);
System.out.println(in.readUTF());
int[] h = (int[]) in.readObject();
System.out.println(h[0]);
int[] j = (int[]) in.readObject();
System.out.println(j[0]);
System.out.println(in.readUTF());
in.close();
}
私は、次のコードを実行すると、それは
This is an Array
3
3
Array Over
どのように私はこの問題を解決する必要がありますを印刷しますか?
アップデート:私は、オブジェクトが一度シリアライズされた後、それはシリアルが変化していないようだことがわかっ
さらなる実験後。ここに示されているように私は、文字列配列を編集して、それの内容は、オブジェクトストリーム
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
FileOutputStream ostr = new FileOutputStream(new File("ObjectFile.yeh"));
FileInputStream istr = new FileInputStream(new File("ObjectFile.yeh"));
ObjectOutputStream out= new ObjectOutputStream(ostr);
String[] hi = new String[5];
hi[0]="Hi";
out.writeUTF("This is an Array");
out.writeObject(hi);
hi[0]="Hello";
hi[1]="Hoopla";
out.writeObject(hi);
out.writeUTF("Array Over");
out.close();
ObjectInputStream in = new ObjectInputStream(istr);
System.out.println(in.readUTF());
String[] h = (String[]) in.readObject();
System.out.println(h[0]+" "+h[1]);
String[] j = (String[]) in.readObject();
System.out.println(j[0]+" "+j[1]);
System.out.println(in.readUTF());
in.close();
}
を介して送信された後に変更されませんし、これは
This is an Array
Hi null
Hi null
Array Over
'どちらのクローンあなたのオブジェクト、または同じ値で新しいオブジェクトを作成し、また2つのメモリ位置をマッピングしObjectOutputStream'。送信者と受信者で 'メモリの場所'が異なるという事実は無関係です。関連する唯一の事実は、最後の2つの 'メモリアドレス'からわかるように、 'ObjectOutputStream'が同じオブジェクトへの参照を保存するということです。そしてあなたは解決策を提供していません。 – EJP