java - 从 ByteBuffer 读取对象时出现 StreamCorruptedException

标签 java object streaming bytebuffer datagram

我正在使用 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/

相关文章:

java - "Syntax error on token "; ", { expected after this token"当它应该是 ; 时

object - 在 Ember.js 中扩展 View 或使用 mixin

java - 通过互联网在聊天应用程序中将音乐从手机传输到手机

python - 如何使用 Python 流套接字作为代理?

java - getDeclaredMethod 不起作用,NoSuchMethodException

java - @SuppressWarnings ("unchecked")不适用于拖放

java - 屏幕旋转后创建位图时出现 OutOfMemoryError

java - 将序列化对象写入文件

javascript - .each 不在数组上工作。但是 .isArray 返回 true?

c# - ASP.NET MVC 执行结果与操作结果