2015-06-27 199 views
-1

我有一个有限的存储空间,只能在字节数组中存储16个字节。如果我有一个很长的字符串,String.getBytes()将不适用于我。将Java字符串转换为16字节的字节数组

你会怎么做转换/编码集内的16个字节的字节数组7位的标准ASCII字符长Java字符串,可编码回到原来的字符串?不过,我明白原始输入字符串会有限制。我还在寻找建议,以便如何用合理的长度限制(即电子邮件地址长度)来设置要求。

+0

字符串是否具有任意值,或者只有有限数量的值可以拥有?这些字符串中会有多少?存储器是否仅限于RAM,或者是否可以将字符串存储在解除16字节限制的地方? – yshavit

+0

该限制实际上是由外部库设置的,它限制以16固定数组大小的字节数组。我的输入字符串实际上是7位ascii可打印字符集中的电子邮件地址。我无法将电子邮件地址限制在16个字符以内,但我想知道一个合理的方法来扩展到合理的电子邮件长度。 – Sean

+1

如果是电子邮件地址,则可以轻松创建自定义编码,将所有小写字母和大多数标点符号映射为5位字符,然后将其扩展为添加对数字的支持。这样,您可以在16个字节中容纳最多25个字符。不确定这对你来说已经足够了。对我而言,事实并非如此。您还可以使用上下文霍夫曼编码对编码地址进行一些实验。不过,我怀疑结果会很好。 –

回答

2

你问的是不可能的。一个任意的,足够长且复杂的字符串不能用16个字节编码。

即使串只使用7位标准的ASCII字符,则将限于编码/解码字符串与18个字符((每字节8位×16个字节),每个字符/ 7位)。在这种情况下,实际的位移算法会非常混乱,并且所产生的内存节省将可以忽略不计。

+0

我的糟糕的问题开始。显然,如果没有对输入字符串的合理限制,这是技术上不可能的。让我重新修复我的问题。谢谢。 – Sean

相关问题