- 25 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 00:43:56 ]
- ごめん誤爆った。
974+2 :デフォルトの名無しさん [] :2009/11/22(日) 21:16:41 シリアライズで質問です。 class clss { int[] arry clss(int[] a){arry=a;}} みたいなクラスを int[] a= {0,1}; int i=0; while(true) { a[0]=i++; clss c= new clss(a) writeObject(c); if(i<100)break; } というようにループで書き出してそのファイルをデシリアライズすると 全ての取り出したインスタンスが a={0,1} になっているようなのですがこれは解決可能なのでしょうか? 992+1 :デフォルトの名無しさん [↓] :2009/11/22(日) 23:23:08 >>974 writeObjectに同じインスタンスを複数回与えたら、 readObjectもその回数だけ同じインスタンスを返す仕様 同じインスタンスが異なる値を持つことは出来ないから、そのような結果になる writeObjectのそのような振る舞いを実装するために、 ObjectOutputStreamは一度書き込んだオブジェクトを全部覚えていて、 同じインスタンスは二度書き込まず前回書き込んだインスタンスの参照だけを書き込むようになっている readObjectも最初と同じインスタンスを返すために、一度読み込んだインスタンスは全部覚えている ObjectOutputStream#writeUnsharedとかObjectInputStream#readUnsharedを使ってみたらどうかな
|

|