javascript
java json转二进制数据_JSON字符串中的二进制数据 . 比Base64更好的东西
UTF-8的問題在于它不是最節省空間的編碼 . 此外,一些隨機二進制字節序列是無效的UTF-8編碼 . 因此,您不能將隨機二進制字節序列解釋為某些UTF-8數據,因為它將是無效的UTF-8編碼 . 這種對UTF-8編碼的約束的好處在于它使得它很可靠并且可以定位多字節字符開始和結束我們開始查看的任何字節 .
因此,如果在[0..127]范圍內編碼字節值只需要UTF-8編碼中的一個字節,則編碼[128..255]范圍內的字節值將需要2個字節!比那更糟糕 . 在JSON中,控制字符“和\”不允許出現在字符串中 . 因此二進制數據需要進行一些轉換才能正確編碼 .
讓我們看看 . 如果我們在二進制數據中假設均勻分布的隨機字節值,那么平均來說,一半字節將在一個字節中編碼,另一半在兩個字節中編碼 . UTF-8編碼的二進制數據將具有初始大小的150% .
Base64編碼僅增長到初始大小的133% . 所以Base64編碼效率更高 .
那么使用其他Base編碼呢?在UTF-8中,對128個ASCII值進行編碼是最節省空間的 . 在8位中,您可以存儲7位 . 因此,如果我們以7位塊的形式剪切二進制數據以將它們存儲在UTF-8編碼字符串的每個字節中,則編碼數據將僅增長到初始大小的114% . 比Base64好 . 不幸的是,我們不能使用這個簡單的技巧,因為JSON不允許一些ASCII字符 . ASCII([0..31]和127)的33個控制字符和“和\”必須被排除 . 這使得我們只有128-35 = 93個字符 .
因此理論上我們可以定義一個Base93編碼,它將編碼大小增加到8 / log2(93)= 8 * log10(2)/ log10(93)= 122% . 但Base93編碼不如Base64編碼方便 . Base64需要以6位塊的形式剪切輸入字節序列,以便簡單的按位運算 . 除133%外,不超過122% .
這就是我獨立得出的結論,即Base64確實是用JSON編碼二進制數據的最佳選擇 . 我的回答是一個為它辯護 . 我同意從性能的角度來看它并不是很有吸引力,但也要考慮使用JSON的好處,它的人類可讀字符串表示易于在所有編程語言中操作 .
如果性能至關重要,則應將純二進制編碼視為JSON的替代 . 但是對于JSON,我的結論是Base64是最好的 .
總結
以上是生活随笔為你收集整理的java json转二进制数据_JSON字符串中的二进制数据 . 比Base64更好的东西的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces Round #70
- 下一篇: ae中心点重置工具_7步学习AE 入门篇