Java如何将shift字节用于发送到websockets的数据

时间:2014-09-23 18:39:02

标签: java websocket bit-manipulation

    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或文档

中找不到详细的解释

1 个答案:

答案 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值就不正确了。