我正在使用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位置,并且应该上升到最后一个字节所在的位置。
答案 0 :(得分:2)
在写入缓冲区之前关闭ObjectOutputStream。