有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

sockets ObjectOutputStream抛出java。木卫一。StreamCorruptedException

我正在尝试使用socket通过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字节

我通过一个java。util。通过ObjectOutputStream的向量

如果我传递的值大于5,则抛出上述异常

我还创建了一个简单的测试(无需通过socket),以确保对象是可序列化的,它可以正常工作。 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();

共 (1) 个答案

  1. # 1 楼答案

    你不需要在字节数组和ByteArrayInputStreams上到处乱搞。只需将ObjectInputStream直接连接到套接字一次,并在每次需要时调用readObject()。在发送方,将ObjectOutputStream直接连接到套接字一次,并在每次需要时调用writeObject()

    你遇到的问题是因为你没有这样做