ソケットを使用して ObjectOutputStream 経由でオブジェクトをロードしようとしています。
同じマシンでテストしています。
次のエラーが表示されます。
java.io.StreamCorruptedException: invalid type code: 00
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readArray(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
このコードを使用して ObjectOutputStream を作成します。
InputStream in = new ByteArrayInputStream(bytes);
ObjectInputStream objectInputStream = new ObjectInputStream(in);
Object readObject = objectInputStream.readObject();
さらに奇妙なのは、それほど大きくないオブジェクトを渡すときに問題がないことです。
問題を返すオブジェクトのバイト単位のサイズは、約 73423 バイトです。
ObjectOutputStream 経由で java.util.Vector を渡します。
5 を超える値を渡すと、上記の例外がスローされます。
また、オブジェクトがシリアライズ可能であることを確認するための簡単なテスト (ソケットを通過しない) も作成しました。問題なく動作します。NNTraining は、私がシリアライズしているクラスです。
Vector<NNTraining> nn = new Vector<NNTraining>();
ByteArrayOutputStream b = new ByteArrayOutputStream();
ObjectOutputStream o = new ObjectOutputStream(b);
o.writeObject(nn);
o.close();
ByteArrayInputStream bb = new ByteArrayInputStream(b.toByteArray());
ObjectInputStream oo = new ObjectInputStream(bb);
Vector<NNTraining> v2 = (Vector<NNTraining>) oo.readObject();