0

我有一组二进制数据,我希望将其紧凑地编码为 ASCII 字符串。我打算最初使用游程编码压缩数据以给出一个整数序列;例如

111110001000000000000111

变成:

5o3z1o12z3o

(例如 5 个 1、3 个 0、1 个 1、12 个 0、3 个 1)。

但是,我希望将其进一步压缩成一个紧凑的 ASCII 字符串(即使用全范围 ASCII 字符而不是数字加上“o”和“z”的字符串)。任何人都可以推荐一种合适的方法和/或第 3 方库在 Java 中执行此操作吗?

4

1 回答 1

3

如果您的目标是压缩,只需 gzip 流。它会比你的游程编码做得更好。

如果你出于某种原因需要它是文本,比如安全地通过旧的邮件网关,我也会转向像 Base64 这样的标准编码,而不是自己编。

但是如果你想自己动手:首先我会注意到你不需要'o'和'z'。您已经知道这些值,因为它们交替出现。假设它从 0 开始(如果不是,则编码一个初始 0 以显示有 0 个 0)。

以文本方式编码数字是可能的,但可能效率低下。查看整数值的可变长度编码,然后对这些字节进行编码。然后以某种方式将它们“转义”为ASCII。

但是我们又回到了类似 Base64 的编码,第一个建议 gzip + Base64 可能比这一切都容易。

于 2011-09-16T09:12:39.390 回答