许多在线文章都在讨论使用base64从36个字符到22个字符的GUID压缩。我想知道有多少字节或位代表压缩的GUID(22字符)? GUID看起来像这样的c9a646d3-9c61-4cb7-bfcd-ee2522c8f633 - 这是32个十六进制数字,每个数字编码4位,所以总共128位。 base64编码每个符号使用6位,使用URL安全字符很容易实现22字符编码字符串。 有多少位代表这些22char?
答案 0 :(得分:1)
GUID在功能上与UUID非常相似。它是一个16字节(128位)的值。 Java的UUID
类使用两个8字节long
,因为这是Java最大的基本类型。如果你对long
进行base-64编码,你将获得22到24个字符,具体取决于是否填充了base-64编码。以下是一些示例代码,可帮助您了解其工作原理:
UUID uuid = UUID.randomUUID();
ByteBuffer buf = ByteBuffer.allocate(16);
buf.asLongBuffer()
.put(uuid.getMostSignificantBits())
.put(uuid.getLeastSignificantBits());
String base64Uuid = Base64.getEncoder()
.withoutPadding()
.encodeToString(buf.array());
22个字符实际上将在Java中使用44个字节,因为Java的char
是16位。您还有char[]
数组本身的开销和String
类的开销,所以它甚至更多。 (大约40个字节,但具体数量取决于您的JVM实现。)
如果您最终在URL中使用base-64编码的字符串,则22个字符将转换为ASCII,然后将占用22个字节,每个ASCII字符一个。