2012-12-13 131 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