繁体   English   中英

Java对String进行长编码/从长解码

[英]Java encoding/decoding a String to/from a long

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

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

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

如果不可能使用128个字符,那么一个长整数可以编码的最大字符数是多少?

PS我也研究了一些散列,但似乎无法满足该问题的解码要求。

我相信Shannon的源编码定理可以用来确定可以将多少数据压缩为64位。

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

看一个相关的问题: gzip的最大压缩率是多少?

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

如果不进行压缩,则可以以64位长的5位字符表示12个字符。 这样就可以在编码26中为32个剩余的alpha和6个编码点提供32个可能的代码点。 对于7位ASCII,您只能容纳9个字符。

通常,在64位中无法处理128个字符(在某些特定情况下,可能会进行压缩),如果将64位编码限制为2个代码点并将其表示为位,则最好使用64位字符。

对于某些字符串,压缩可能可以将其提取出来,但对于所有可能的128个字符的字符串,通常不能提取压缩。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM