我有一个二进制数据的位,我希望紧凑地编码为ASCII字符串。我打算最初使用行程编码压缩数据,以给出一个整数序列; e.g。
111110001000000000000111
变为:
5o3z1o12z3o
(例如5个,3个零,1个,12个零,3个)。
但是,我希望然后将其进一步压缩为紧凑的ASCII字符串(即使用全部ASCII字符而不是数字加上'o'和'z'的字符串)。任何人都可以推荐一个合适的方法和/或第三方库来用Java做到这一点吗?
答案 0 :(得分:3)
如果你的目标是压缩,只需gzip流。它会比你的游程编码做得更好。
然后,如果由于某种原因需要它是文本,比如安全地通过旧的邮件网关,我也会转向像Base64这样的标准编码,而不是自己制作。
但如果你想自己动手:首先我要注意你不需要'o'和'z'。您已经知道这些值,因为它们是交替的。假设它从0开始(如果不是,则编码一个初始值0表示有0 0)。
以文本方式编码数字是可能的,但可能效率低下。查看整数值的可变长度编码,然后对这些字节进行编码。然后以某种方式将它们“转义”为ASCII。
但是接下来我们又回到了类似Base64的编码,对gzip + Base64的第一个建议可能比所有这些都容易。