我想知道二進制文本和基於文本的協議之間有什麼區別。 我讀過,二進制協議是更緊湊/更快的處理。 這是如何工作的?既然你必須發送相同數量的數據?沒有?二進制與文本協議
E.g字符串「hello」如何在二進制格式中大小不同?
謝謝
我想知道二進制文本和基於文本的協議之間有什麼區別。 我讀過,二進制協議是更緊湊/更快的處理。 這是如何工作的?既然你必須發送相同數量的數據?沒有?二進制與文本協議
E.g字符串「hello」如何在二進制格式中大小不同?
謝謝
如果你所做的只是傳輸文本,那麼是的,兩者之間的差異並不是很顯着。但考慮嘗試傳輸的東西,如:
字符串「hello」本身在大小上沒有差異。大小/性能差異在序列化引入的附加信息中(序列化是程序如何表示要傳輸的數據,以便一旦它到達管道的另一端就可以重新構建它)。
例如,序列化在.NET下使用XML(文本序列化方法之一)時:
string helloWorld = "Hello World!";
你可能會得到這樣的事情(我知道這是不準確):
<helloWorld type="String">Hello World!</helloWorld>
鑑於二進制序列化將能夠以二進制方式原生地表示該數據,而沒有所有額外的標記。
如果使用ASN.1和BER送「你好」的協議消息是這樣的:
ProtocolMessage ::= String
;
然後1個字節需要以編碼其標識符octer,1個字節需要以編碼長度和「hello」的UTF-8編碼是另外5個字節。所以結果消息是7個字節。
二進制協議是更好,如果你正在使用的控制位/字節
即不是發送消息:你好 二進制也可以是0×01,然後你的信息(假設0x01爲它代表味精控制字節)
所以,既然在文本協議發送消息:你好\ 0 ...它涉及到10個字節 其中在二進制協議將是0x01Hello \ 0 ......這涉及到7個字節
而另一個例子,假設你想發送一個數字255,在文本中它的3個字節 在哪裏二進制它的1字節,即0xFF
會更普遍是4個原始字節(0x0000_00FF),以支持更大的整數,和你平時必須得算在文本協議的分隔符,讓至少4個字節的有(「255」+1)。 – 2010-03-03 01:38:39
@Roger佩特:重點是,二進制協議有有* *潛在更高的熵相比文本協議。如果我知道數字在1到255之間,爲什麼我會使用整數來編碼它?我還可以將你的例如大約:如果確實是有具有32個固定位,而不是4個字節編碼需要大量的(例如整數從1到4,294,967,295)然後任意數量超過999更大正在被越來越efficienty。 – Caffeine
@Caffeine:如圖所示,我使用的「字節」定義爲「8位」,所以32位是相同的4個字節。 – 2010-07-04 23:33:46
我不會說二進制格式更快處理。如果您看一下CSV或固定字段長度的文本格式 - 仍然可以快速處理。
我會說,一切都取決於誰是消費者。如果人類最後(比如HTTP或RSS),那麼就不需要壓縮數據,除非壓縮它。
二進制協議需要解析器/轉換器,難以擴展並保持向後兼容性。你在協議棧去越高,越人性化協議(TCP是二進制的,因爲數據包必須通過高速路由器進行處理,但XML是更加人性化)。
我認爲,尺寸變化今天並不重要。對於你的榜樣,hello
將在二進制格式相同數量的文本格式,因爲文本格式也是「二進制」的計算機 - 只有我們interprete數據問題的方式。
-1二進制格式可以更快地處理,因爲它們可以更好地匹配機器表示。 HTTP用於計算機與計算機之間的通信以及計算機與計算機之間的通信。與文本協議相比,二進制協議(可以)對解析器/轉換器的需求較少。協議棧越高,協議的**摘要越多,而不是面向人的。如果你有一個好的讀者(GIFF或者JPG),二進制可以被認爲是以人爲本的。尺寸變化可能非常重要 - 想想移動設備和移動網絡。 – MarkJ
這在很多層面上都是錯誤的,它甚至不好笑 –
您需要清楚協議的部分內容以及數據的一部分。 文本協議可以發送二進制數據,二進制協議可以發送文本數據。
該協議是消息的部分狀態「你好我可以連接嗎?我有一些數據,我應該把它放在哪裏?,你有我的回覆?很好!謝謝,再見!」
轉換的每一位(可能)的二進制協議小得多,以HTTP例如(基於文本):
,如果你有一個編碼標準,我敢打賭,你能想出的序列字符小於4字節所需的單詞'PUSH'
另一方面,3個字節更小並不是「小得多」。是的,它可以加起來,但有時候人們會爲75%的潛在節省而興奮不已,而且看起來沒有更多。 (並且爲了記錄,我已經犯了這個錯誤了很多次。) –
文本協議在可讀性,易於重新實現和易於調試方面更好。二進制協議更緊湊。
但是,您可以使用像LZO或Zlib壓縮庫壓縮你的文字,這是幾乎一樣緊湊二進制(用很少的性能損失的壓縮/解壓縮)。
你可以閱讀更多的信息這裏的主題:
http://www.faqs.org/docs/artu/ch05s01.html
您也可以壓縮二進制數據。以文本格式傳輸數字比純數字傳輸速度慢。 – bokan
一個更有趣的問題是_when_選擇二進制或基於文本的協議,即它們的一般(dis)優點是什麼。 Max E.的答案中的鏈接在這裏很有幫助。 –
這是一個更有趣的問題,當你已經知道二進制和文本協議之間的區別,但有像我這樣的人,但還得學習:) –
可能重複的[二進制協議死了嗎?](http:// stackoverflow .COM /問題/ 2525188 /是二進制的協議死) –