2014-09-23 11 views
0
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個字節,爲什麼轉移開始從56到8拿什麼在發送數據的WebSockets的例子這shiftings字節?這樣做的目的是什麼?的Java如何轉變字節工作在數據發送到WebSockets的

0 
1 
12 
175 
0 
1 
12 
175 

我怎麼可以理解,如果這是正確的價值觀:

我在這個順序打印出來的時候得到這個結果?因爲我無法在RFC或文檔中找到對此的詳細說明。

回答

1

移位對位而不是字節進行操作。如果len的大小超過32位,則一次移動超過32位只是有意義的。此代碼發送一個8字節的整數值給同位體,所以len必須是64位long

數值0 1 12 175 0 1 12 175是字節序列(十六進制)00 01 0C AF 00 01 0C AF。如果顛倒的轉變,共同Concat的他們:

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值是不正確的開始。

+0

len是一個textBytes.length;它是一個整數值,我應該把它轉換爲長?,請舉一個小例子... – DoublePudge 2014-09-23 18:49:54

+0

一個'int'是一個32位數據類型,你不能移動它超過32位。如果對等體期望64位值,那麼必須先將「int」強制轉換爲「long」,然後根據需要進行轉換。但是在這種情況下,高4字節總是爲零。 – 2014-09-23 18:57:25

+0

是的,非常感謝你我已經改變了int類型到很長時間,它的工作,那是我的問題! – DoublePudge 2014-09-23 18:58:34

相關問題