我正在尝试使用套接字通过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();
更奇怪的是,当我传递不那么大的物体时,没有任何问题。
我读取的返回probleam的对象的大小以字节为单位:73423字节。
我通过ObjectOutputStream传递java.util.Vector。
如果我传递的金额大于5,则抛出上述异常。
我还创建了一个简单的测试(不通过套接字)以确保Object是Serializable,它可以正常工作。 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();
答案 0 :(得分:0)
你不需要使用字节数组和ByteArrayInputStreams来解决所有问题。只需将ObjectInputStream直接附加到套接字一次,并在每次调用时调用readObject()。在发送方,将ObjectOutputStream直接附加到套接字一次,并在每次需要时调用writeObject()。
你遇到的问题是因为你没有这样做。