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或文档
中找不到详细的解释答案 0 :(得分:1)
移位操作位,而不是字节。如果len
的大小超过32位,则一次移位超过32位才有意义。此代码向对等方发送 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
值就不正确了。