Maf*_*uba 5 java uuid encoding
在 Java 中创建随机 UUID 并进行 Base32 编码最省时的方法是什么?我想使用 Base32 编码来存储可在 URL 中使用的全局唯一 ID。
Base32 仍然用=字符,因此如果您确实想避免 URL 转义,则需要对此进行一些操作。
如果您确实想避免 Base16,我建议您使用 Base64 而不是 Base32。如果您想使用 RFC 标准,请尝试base64url。但是,该标准还使用“=”作为尾随填充,因此您需要转义它。它的替代品是:
+ -> -/ -> _= -> =就我个人而言,我使用名为 Y64 的变体。它的替代品是:
+ -> ./ -> _= -> -它不是 RFC 标准,但至少您不必担心转义尾部“=”。
Apache Commons Codec 提供 Base64 和 Base32。这是带有 Y64 变体的 Base64 的示例
编码:
UUID uuid = UUID.randomUUID();
ByteBuffer uuidBuffer = ByteBuffer.allocate(16);
LongBuffer longBuffer = uuidBuffer.asLongBuffer();
longBuffer.put(uuid.getMostSignificantBits());
longBuffer.put(uuid.getLeastSignificantBits());
String encoded = new String(Base64.encode(uuidBuffer.array()),
Charset.forName("US-ASCII"));
encoded = encoded.replace('+', '.')
.replace('/', '_')
.replace('=', '-');
Run Code Online (Sandbox Code Playgroud)
并解码:
String encoded; // from your request parameters or whatever
encoded = encoded.replace('.', '+')
.replace('_', '/')
.replace('-', '=');
ByteBuffer uuidBuffer = ByteBuffer.wrap(Base64.decode(
encoded.getBytes(Charset.forName("US-ASCII"))));
LongBuffer longBuffer = uuidBuffer.asLongBuffer();
UUID uuid = new UUID(longBuffer.get(), longBuffer.get());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7068 次 |
| 最近记录: |