java – 将uuid转换为字节,当使用UUID.nameUUIDFromBytes(b)

前端之家收集整理的这篇文章主要介绍了java – 将uuid转换为字节,当使用UUID.nameUUIDFromBytes(b)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用此代码将UUID转换为字节 @H_403_2@public byte[] getIdAsByte(UUID uuid) { ByteBuffer bb = ByteBuffer.wrap(new byte[16]); bb.putLong(uuid.getMostSignificantBits()); bb.putLong(uuid.getLeastSignificantBits()); return bb.array(); }

但是,如果我尝试使用此功能重新创建UUID,

@H_403_2@public UUID frombyte(byte[] b) { return UUID.nameUUIDFromBytes(b); }

这是不一样的UUID.转换一个randomUUID来回返回两个不同的.

@H_403_2@UUID u = UUID.randomUUID(); System.out.println(u.toString()); System.out.println(frombyte(getIdAsByte(u)).toString());

打印:

@H_403_2@1ae004cf-0f48-469f-8a94-01339afaec41 8b5d1a71-a4a0-3b46-bec3-13ab9ab12e8e

解决方法

@H_403_2@public class UuidUtils { public static UUID asUuid(byte[] bytes) { ByteBuffer bb = ByteBuffer.wrap(bytes); long firstLong = bb.getLong(); long secondLong = bb.getLong(); return new UUID(firstLong,secondLong); } public static byte[] asBytes(UUID uuid) { ByteBuffer bb = ByteBuffer.wrap(new byte[16]); bb.putLong(uuid.getMostSignificantBits()); bb.putLong(uuid.getLeastSignificantBits()); return bb.array(); } } @H_403_2@@Test public void verifyUUIDBytesCanBeReconstructedBackToOriginalUUID() { UUID u = UUID.randomUUID(); byte[] uBytes = UuidUtils.asBytes(u); UUID u2 = UuidUtils.asUuid(uBytes); Assert.assertEquals(u,u2); } @Test public void verifyNameUUIDFromBytesMethodDoesNotRecreateOriginalUUID() { UUID u = UUID.randomUUID(); byte[] uBytes = UuidUtils.asBytes(u); UUID u2 = UUID.nameUUIDFromBytes(uBytes); Assert.assertNotEquals(u,u2); }

猜你在找的Java相关文章