0

我正在使用 java NIO 数据报通道(在阻塞模式下)。我想将对象从一侧传输到另一侧。这就是我在发件人端所做的:

          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          ObjectOutputStream oos = new ObjectOutputStream(baos);
          oos.writeObject(pkt);
          ByteBuffer buffer = ByteBuffer.wrap(baos.toByteArray());
          while(buffer.hasRemaining())
                 channel.write(buffer);

pkt是我ControlPacket要传输的类的对象。在接收方:

          ByteBuffer buffer = ByteBuffer.allocate(8192);
          channel.receive(buffer);
          buffer.flip();
          ByteArrayInputStream bias = new  ByteArrayInputStream(buffer.array(),0,buffer.limit());
          ObjectInputStream ois = new ObjectInputStream(bias);
          pkt = (ControlPacket)ois.readObject();

但是我java.io.StreamCorruptedException: invalid stream header: 00000094在运行代码时出错。无法弄清楚代码中有什么问题。我的意思是,因为我在收到缓冲区后翻转缓冲区,读取它的指针将重置为 0 位置,并且应该上升到最后一个字节所在的位置。

4

1 回答 1

2

在写入缓冲区之前关闭 ObjectOutputStream。

于 2012-11-23T21:58:33.447 回答