Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从ByteBuffer读取对象时StreamCorruptedException_Java_Object_Streaming_Bytebuffer_Datagram - Fatal编程技术网

Java 从ByteBuffer读取对象时StreamCorruptedException

Java 从ByteBuffer读取对象时StreamCorruptedException,java,object,streaming,bytebuffer,datagram,Java,Object,Streaming,Bytebuffer,Datagram,我正在使用JavaNIO数据报通道(在阻塞模式下)。我想把一个物体从一边传送到另一边。这是我在发送方所做的: ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(pkt); ByteBuffer buffer =

我正在使用JavaNIO数据报通道(在阻塞模式下)。我想把一个物体从一边传送到另一边。这是我在发送方所做的:

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

在写入缓冲区之前关闭ObjectOutputStream