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
值一开始就不正确。