从ByteBuffer读取Object时StreamCorruptedException

时间:2012-11-23 11:21:28

标签: java object streaming bytebuffer datagram

我正在使用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位置,并且应该上升到最后一个字节所在的位置。

1 个答案:

答案 0 :(得分:2)

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