许多网上的文章都在谈论使用base64从36个字符到22个字符的GUID压缩。我想知道多少个字节或位表示完全压缩的GUID(22个字符)? 一个GUID看起来像这样c9a646d3-9c61-4cb7-bfcd-ee2522c8f633 - 这是32位十六进制数字,每个编码4位,总共128位。 base64编码使用每个符号6位,使用URL安全字符可以很容易地实现22位字符编码的字符串。 代表这些22char的位数是多少?128位(16字节)GUID被压缩到多少位或字节?
回答
GUID在功能上非常类似于UUID。它是一个16字节(128位)值。 Java的UUID
类使用两个8字节的long
,因为这是Java最大的基本类型。如果base-64对long
进行编码,您将获得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的基64编码的字符串时,22个字符将被转换为ASCII,然后将占用22个字节,每个ASCII字符一个。
或者,而不是字符串和base-64,将UUID作为[原生UUID类型](https://www.postgresql.org/docs/current/static/datatype-uuid.html)存储在数据库中128位(16个八比特组/字节)。 –
是的,如果您使用的是数据库,并且它具有本机UUID类型,而不是将它们存储为字符串。 – ngreen
- 1. WebSocket key1 + key2 + 8_byte_data!= 16字节(128位)?
- 2. 拍照后压缩位图或字节[]
- 3. 字节大小8位或16位?
- 4. Range头是压缩或未压缩字节的大小(以字节为单位)?
- 5. 128千字节或128千字节? 128 kB或128 kB?
- 6. 如何从32位/ 24位从字节到16位转换为字节
- 7. 半字节中有多少位?
- 8. 位图压缩不会更改位图字节大小
- 9. Golang中如何计算字节中有多少位字节?
- 10. 如何从8位字节转换为7位字节(基地256基地128)
- 11. 从16位创建4个字节
- 12. 移位字节
- 13. Unity中的字节压缩
- 14. C#压缩字节数组
- 15. 需要多少位数来编码一个八位字节?
- 16. 在java中的AES-128位字节数组到数据库
- 17. 以字节为单位解压缩加密文件
- 18. 使用Ruby解压缩3字节/ 24位数据块
- 19. 压缩位图返回的字节总是相同的
- 20. 在Python中打包和解压缩位和字节
- 21. 无符号字符[],位或字节?
- 22. 编码/压缩ARGB到3个字节
- 23. GZIP压缩到一个字节数组
- 24. 将32位实数转换为2x 16位字节
- 25. 阵列封装的效率:8位(字节)与16位元素?
- 26. 位数组到字节 - java
- 27. Android字节到位图
- 28. 从字节转换为7位字节
- 29. 字母A在UTF-16中占用的字节数是多少?
- 30. Java字节移位
你问一个22字符的字符串使用多少个字节? – VGR
是的,那正是我的问题。 36个字符表示128位。 22chachars怎么样? –
提供这样的文章的例子可能有助于理解你的意思 – Andremoniy