我正在使用 java NIO 数据报 channel (阻塞模式)。我想将一个对象从一侧传输到另一侧。这就是我在发送方所做的事情:
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。
关于java - 从 ByteBuffer 读取对象时出现 StreamCorruptedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13528042/