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