建议将十进制压缩为不区分大小写的字符串的方法是什么?

时间:2019-04-23 09:51:13

标签: java performance character-encoding

我有一个消息传递系统,该系统使用REST,Websockets和磁盘上的文件在连接的两侧都使用Java传递消息。然后,将发送的消息用作安全性令牌,以查询各种索引和数据库,这在这里至关重要。我已经考虑过将Long作为字节数组之类的Base64.encodeBase64()之类的东西,但这是区分大小写的,而且在空间方面也没有太多节省。我曾考虑过将其转换为hex和toString(),但相比起来节省的很少。我希望对这样的事情有一个行业标准,或者我很不幸,成为一个白痴,忽视了很明显的事情,或者使用了错误的语言。只要在令牌的另一端照原样使用令牌,就没有实际的解码要求,它必须是唯一,可重复,可靠且较小的。

我必须能够以纯字符串形式发送令牌

我必须能够重复地将Long编码为字符串

令牌必须不区分大小写(a == A)

令牌必须尽可能压缩,大小很重要

Long值没有前导0,没有负数,没有小数位

1 个答案:

答案 0 :(得分:2)

仅当您区分大小写时,才适合使用Base64。

从根本上讲,您需要确定可以用作符号集的字符数,这确定字符串的紧凑程度。符号越多,字符串就越紧凑。

听起来您可以使用所有大写字母和所有数字字母。这将为您提供36个符号和最多ceil(log(2^64)/log(36))个字符,即13个字符串。

例如

String s = Long.toString(x, 36);
long l = Long.parseLong(s, 36);