【发布时间】:2011-11-15 09:33:13
【问题描述】:
我正在寻找一种方法来尽可能缩短已经很短的字符串。
字符串是主机名:端口组合,可能类似于“my-domain.se:2121”或“123.211.80.4:2122”。
我知道对于这么短的字符串,由于所需的开销和缺乏重复,定期压缩几乎是不可能的,但我知道如何做到这一点。
因为字母表被限制为 39 个字符 ([a-z][0-9]-:.),每个字符可以容纳 6 位。与 ASCII 相比,这将长度减少了 25%。所以我的建议是这样的:
- 使用某种自定义编码将字符串编码为字节数组
- 将字节数组解码为 UTF-8 或 ASCII 字符串(该字符串显然没有任何意义)。
然后逆过程得到原字符串。
所以我的问题:
- 这可行吗?
- 有没有更好的办法?
- 怎么样?
【问题讨论】:
-
您遗漏了第四个问题:为什么?
-
您将您的应用程序限制为仅支持 Latin-1 字符?您希望存储多少这些值?对我来说,这听起来像是为了节省少量空间而付出的巨大努力。磁盘很便宜,开发/维护时间非常昂贵。
-
这与磁盘空间无关。我需要尽可能短,因为可以在键盘、电话或口语上手动输入生成的字符串。
-
@Gustav,看,这就是为什么你应该总是提到原因。如果要复制 tinyurl,请构建自己的(短)字符串并将它们映射到数据库中的 url 地址。您可以从一个字母字符串开始,然后逐步向上,对于一个中低流量的网站,您不太可能超过三个字符。
-
@Blindy 我认为实际上不需要它。但你是对的。消息将在两个应用程序之间传输,因此它们无权访问任何类型的共享地图。
标签: java string encoding compression