如何将Parse ObjectId(String)转换为long?

Pau*_*ulo 4 java parse-platform

Parse.com中的每个对象都有自己的ObjectId,这是一个包含10个字符的字符串,显然它是由这个正则表达式创建的:[0-9a-zA-Z]{10}.

Parse中ObjectId的示例:

  • X12wEq4sFf
  • Weg243d21s
  • zwg34GdsWE

我想将此String转换为Long,因为它将节省内存并改善搜索.(使用UTF-8的10个字符有40个字节,1个长度有8个字节)

如果我们计算组合,我们可以找到:

  • String ObjectId: 62 ^ 10 = 839299365868340224不同的值;
  • long:是2 ^ 64 = 18446744073709551616不同的值.

因此,我们可以转换这些值而不会丢失信息.有一种简单的方法可以安全地完成它吗?请考虑Chars的任何编码(UTF-8,UTF-16等);

编辑:我只是想以一种艰难的方式来解决它.我问是否有一个简单的方法.

tza*_*man 5

  1. 您的字符集是常用Base64编码的子集,因此您可以使用它.Java有Base64类,不需要为此编写自己的编解码器.
  2. 你确定这实际上有价值吗?"因为它会节省内存并改善搜索"似乎是一个未经测试的断言; 在ID上保存几个字节可能会被每次想要使用某些东西时增加的编码和解码成本所抵消.

编辑:另外,为什么你使用UTF-8字符串保证ascii数据?如果你将10个字符ID表示为a byte[10],则只需10个字节而不是40个字节(即a 接近8 个字节long).而且您不需要进行任何花哨的转换.

  • @Paulo您也可以将其存储为字节[10],因为所有字符都在标准ASCII范围内. (3认同)