Java 移位字节在将数据发送到 websocket 中是如何工作的


    op.write((byte)((len >> 56) & (byte)255));
    op.write((byte)((len >> 48) & (byte)255));
    op.write((byte)((len >> 40) & (byte)255));
    op.write((byte)((len >> 32) & (byte)255));
    op.write((byte)((len >> 24) & (byte)255));
    op.write((byte)((len >> 16) & (byte)255));
    op.write((byte)((len >> 8) & (byte)255));
    op.write((byte)(len & 255));

我试图了解当有效载荷超过 65536 字节时将数据发送到 websockets 的示例中的这种转移意味着什么,为什么从 56 字节开始到 8 字节? 这样做的目的是什么?

按此顺序打印时,我得到以下结果:

0
1
12
175
0
1
12
175

我如何理解这是否是正确的值? 因为我在 RFC 或文档中找不到对此的详细说明

移位操作在位上,而不是字节上。一次移动超过 32 位仅在大小超过 32 位时len才有意义。 此代码向对等方发送一个 8 字节整数值,因此len必须是 64 位long

0 1 12 175 0 1 12 175的数值是字节序列(十六进制(00 01 0C AF 00 01 0C AF。 如果反转移位并将它们连接在一起:

long len = (((long)0) << 56) |
           (((long)1) << 48) |
           (((long)12) << 40)|
           (((long)175) << 32)|
           (((long)0) << 24) |
           (((long)1) << 16) |
           (((long)12) << 8) |
             (long)175;

你最终会得到295420735589551。这是您最初的len值吗? 如果不是,则您的源len值一开始就不正确。

相关内容

  • 没有找到相关文章

最新更新