Java编码/解码一个字符串到/从一个长

标签 java string algorithm encoding hash

我有一个字符串,我想用 Java 将其编码为 long;我还想将它从 long 解码回 String。重要的是它是“长”(原始)而不是长(对象)。字符串的最大长度为 128 个字符,但通常要小得多。字符串的字符以 ASCII 编码,并且仅使用标准 ASCII 值 (0-127) 而不是扩展的 ASCII 代码 (0-256)。

我能够通过将每个字符转换为长(8 字节)的每个字节来编码长度为 8 的字符串。由于每个字符的范围是 0-127(7 位),我相信我可以在 long(64 位/7 位 = 9.14)中编码多达 9 个字符,但我还没有实现它。

我有一种感觉(对所有 128 个字符进行编码)可能是不可能的,但我想打开这个问题,看看是否有更好的技术。

如果 128 个字符是不可能的,那么您可以编码成 long 的最大字符数是多少?

附言我也研究了一下散列,但它似乎无法满足问题的解码要求。

最佳答案

我相信Shannon's source coding theorem可用于确定可以将多少数据压缩成 64 位。

您需要达到 14:1 的压缩比,这是可能的,但它在很大程度上取决于您的数据集。例如,如果您的输入字符串恰好是重复 128 次的单个字符,则可以将 896 位(128 个字符)压缩为 64 位。我怀疑对于 所有 128 个字符的字符串来说,不可能达到这个压缩率。

看看一个有点相关的问题:What is the maximum compression ratio of gzip? .

此外,您可能会在 cs.stackexchange.com 上获得更好的答案因为这更像是一个理论问题而不是编程问题。

关于Java编码/解码一个字符串到/从一个长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19601956/

相关文章:

algorithm - 二叉树与链表与哈希表

将任意数量的 HTML 文档分类为主题的算法

algorithm - 如何有效地找到图的邻居

java - NoClassDefFoundError : scala/Product$class

java - 无法使用 java 选择 Selenium Webdriver 中的复选框

Python:在多列中查找字符串并将其返回到新列中

c# - 为什么 string.Replace ("X","Y") 仅在分配给新字符串时有效?

java - 为什么我总是得到单例 bean,即使我使用 proxyBeanMethods = false?

java - 将参数从 servlet 转发到 jsp

objective-c - cocoa 教程中的字符串格式化