0

我通过 UDP 发送长号码。

    LinkedQueue Q = new LinkedQueue<ByteBuffer>();
    while (this._run) {
    udp_socket.receive(packet);
      if (packet.getLength() > 0) {
       ByteBuffer bb = ByteBuffer.wrap(buf, 0, packet.getLength());     
               Q.add(bb);
          }
    }

//udp 关闭。我从队列中删除数据,但所有 ByteBuffers 都具有相同的值。

    while(!Q.isEmpty){
      ByteBuffer b = Q.remove();
      b.getLong();//same value
    }

为什么我收到相同的价值?有什么建议吗?

4

1 回答 1

1

您的字节缓冲区是否仅包含一个long

可能不是,我的猜测是你放太多了,只放了一个long。这就是为什么它在第一个sizeof(long)字节上为您提供相同的值。

您需要做的是继续调用 .getLong() 直到到达缓冲区的末尾。

请参阅文档。

于 2013-04-02T15:33:29.510 回答