2011-10-11 109 views
4

我正在做一個WebSockets和Java的實驗。顯然,根據WebSocket的最後一份草案,消息可以是二進制或純字符串。我用Webbit服務器,它有兩個功能:通過流的二進制與字符串傳輸

public void onMessage(WebSocketConnection connection, String message) 

public void onMessage(WebSocketConnection connection, byte[] message) 

我不知道有差別。字節[]是否更快?或者爲什麼這很重要?我可以寫所有我寫的字節,因爲即使一個字符串在傳輸過程中被組成字節,那麼爲什麼我們有兩個多重方法?只有Google Chrome 15 Beta和16 Dev支持二進制傳輸,因此我正考慮在客戶端和服務器上使用Base64編碼/解碼。這是唯一的區別嗎?如果我只是讀每個字節,將它們組成一個字符串併發送它們呢?我認爲,唯一的區別是不是所有字節都是字符串字符,所以我只是在轉換爲字符串時添加開銷?

tl; dr - >二進制傳輸和字符串傳輸有什麼區別?

+1

你問了幾個問題!? – Mob

+0

@Mob,我只是困惑,其實這是一個問題,有什麼區別?我剛纔提出的問題更加清楚。如果你願意,你會解釋一下。 – Mustafa

回答

6

WebSocket協議(HyBi)支持兩種不同的有效負載類型:文本,二進制。文本有效負載是UTF-8編碼的字符串數據。您發送的字符串中任何高於127的ASCII碼都將轉換爲兩字節的UTF-8編碼。要成功發送/接收原始二進制數據,您可能希望將數據編碼爲base64(與UTF-8兼容)之類的東西。

二進制有效載荷類型直接發送。字節在有效載荷中按原樣發送。這是更高的帶寬效率。這意味着您不必執行編碼/解碼步驟。您發送的字節直接發送,並且您收到的字節可以直接訪問而不需解碼。

0

當您使用字節時,它實際上只是在發送它之前將其轉換爲十六進制。至於速度。我不認爲這有什麼不同。它看起來像他們給你太多的選擇,所以你可以用任何方式發送數據,這取決於你已經有了什麼數據。