許多網上的文章都在談論使用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