Java 128位(16字节)GUID压缩到多少位或字节?

Java 128位(16字节)GUID压缩到多少位或字节?,java,database,compression,uuid,guid,Java,Database,Compression,Uuid,Guid,许多在线文章都在讨论使用base64将GUID从36个字符压缩到22个字符。我想知道有多少字节或位准确地表示压缩的GUID(22个字符)? GUID类似于c9a646d3-9c61-4cb7-bfcd-ee2522c8f633,即32个十六进制数字,每个数字编码4位,总共128位。base64编码每个符号使用6位,这很容易通过URL安全字符实现,从而得到22个字符编码的字符串。 多少位代表这22个字符?GUID在功能上与UUID非常相似。它是一个16字节(128位)的值。Java的UUID类使用

许多在线文章都在讨论使用base64将GUID从36个字符压缩到22个字符。我想知道有多少字节或位准确地表示压缩的GUID(22个字符)?
GUID类似于c9a646d3-9c61-4cb7-bfcd-ee2522c8f633,即32个十六进制数字,每个数字编码4位,总共128位。base64编码每个符号使用6位,这很容易通过URL安全字符实现,从而得到22个字符编码的字符串。
多少位代表这22个字符?

GUID在功能上与UUID非常相似。它是一个16字节(128位)的值。Java的
UUID
类使用两个8字节的
s,因为这是Java最大的原语类型。如果使用base-64编码
long
s,将获得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());
在Java中,这22个字符实际上将使用44个字节,因为Java的
char
是16位。您还有
char[]
数组本身的开销和
String
类的开销,所以它甚至比这还要大。(大约40字节,但具体数量取决于JVM实现。)


如果您最终在URL中使用base-64编码字符串,则22个字符将转换为ASCII,然后将占用22个字节,每个ASCII字符一个。

您是在问22个字符字符串使用多少字节?是的,这正是我的问题。36个字符由128位表示。关于22个字符呢?提供此类文章的示例可能有助于理解您的意思22个base64字符作为字符串存储时将使用22个字节,假设采用ASCII或UTF-8字符编码。GUID类似于c9a646d3-9c61-4cb7-bfcd-ee2522c8f633-即32个十六进制数字,每个编码4位,因此,base64编码总共128位,每个符号使用6位,这很容易通过URL安全字符获得22个字符编码的字符串。或者,不使用字符串和base-64,而是将UUID存储在数据库中,仅为128位(16个八位字节/字节)。是的,如果您使用的是数据库,并且它具有本机UUID类型,则最好将其存储为字符串。