2012-12-13 127 views
4

我有一些字節數據,我想將它們放到Redis中,但Redis只接受二進制安全字符串,並且我的數據有一些二進制非安全字節。那麼,如何將這些字節轉換爲二進制安全字符串,以便將它們保存到Redis?Java將字節轉換爲二進制安全字符串

Base64適用於我,但它使數據變大,有什麼更好的想法?

更新:我想序列化我的protobuf對象到Redis,並且序列化的數據有'\ x00',所以當我從Redis讀取數據時,我無法反序列化要對象的數據。然後我嘗試了base64,它工作正常,但尺寸較大。

所以我想弄清楚如何序列二進制數據(protobuf的對象)Redis的安全與更小的尺寸

+3

你有詳細的*確切的*什麼是「二進制安全字符串」的含義?這不是一個標準的術語。 –

+0

[閱讀本文](http://redis.io/topics/data-types),對於Redis來說,二進制安全似乎意味着Redis不會更改內容。除非我錯過了某些東西(可能性很小,因爲我之前沒有使用過Redis),所以您不需要對數據做任何事情。 – Pablo

+0

@Pablo我已更新我的問題了解更多詳情 – jiluo

回答

2

你可以試試ISO-8859-1編碼。這使用字節和字符之間的一對一映射。

這可能仍然會導致腐敗,這取決於Redis爲什麼需要此「二進制安全」字符串。您可能必須使用base64。

+0

我想找到一個更小尺寸的方法,base64現在適合我,但我認爲它不夠好 – jiluo

+0

如果使用ISO-8859-1作品,您可能會發現它不會增加尺寸。 Base64將3個字節變成4個字符,這將1個字節變成1個字符(反之亦然) –

-1

序列化二進制對象(如protobuf對象)的唯一安全方法是對base64進行編碼。 Base64具有33%的開銷,但可讓您安全地將任意二進制數據轉換爲文本(例如用於xml文件)並返回。

+0

33%的開銷或166%的開銷?在許多環境中,每三個字節的數據變成四個雙字節字符,即總共8個字節? – supercat