我们有一个Java UUID字段,在以下转换后以二进制字节存储在数据库(MySQL)中
private byte[] getUUIDtoBytes(UUID devId) {
byte[] uuidBytes = new byte[16];
ByteBuffer.wrap(uuidBytes)
.order(ByteOrder.BIG_ENDIAN)
.putLong(devId.getMostSignificantBits())
.putLong(devId.getLeastSignificantBits());
return uuidBytes;
使用resultSet.getBytes从DB检索后,字节数组按以下方式转换回UUID
private UUID toUUID(byte[] bytes) {
ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
Long high = byteBuffer.getLong();
Long low = byteBuffer.getLong();
return new UUID(high, low);
}
这个工作正常,直到现在我必须在生产中找到一行的UUID字段。显示记录的应用程序可能使用getText或getString来显示字节数组,只需获取结果字符串的字节数组(使用UTF-8)并应用我的toUUID方法,我就无法获取记录的UUID值:(
不幸的是,我们服务的所有检索端点都需要此UUID字段。我是否可以提示如何使用该字节数组的字符串格式,并将其转换回原始UUID?
答案 0 :(得分:0)
我认为您可以通过UUID
方法将您的UUID字符串转换为真正的UUID#fromString()
对象。然后,您可以比较两个UUID的最低和最高有效位字段:
boolean UUIDIsEqual(UUID one, String twoInput) {
UUID two = UUID.fromString(twoInput);
if (one.getLeastSignificantBits() == two.getLeastSignificantBits() &&
one.getMostSignificantBits() == two.getMostSignificantBits()) {
return true;
}
return false;
}
如果您没有使用UUID
作为参考,那么您可以使用已经拥有的toUUID()
方法将字符串转换为UUID。
按照以下链接获取演示,该演示显示UUID转换的字符串有效并且在逻辑上是正确的: