java uuid 字符串_java-UUID是来自不同字符串的相同

123438Y1036D-7527-442A- 98 SA-FF19留下155只熊

这不是UUID。 它是“ 1234”和UUID的串联字符串。 这里的问题是解析器应该通过抛出异常来告诉您这一点。 取而代之的是,它会尽最大努力真正找到埋在其中某个地方的UUID。

从串联字符串中提取UUID后,它与第一个UUID相同,这是您正在观察的正确结果。

我们可以分析解析器(感谢@ tim-biegeleisen提供了链接):

public static UUID fromString(String name) {

String[] components = name.split("-");

if (components.length != 5)

throw new IllegalArgumentException("Invalid UUID string: "+name);

for (int i=0; i<5; i++)

components[i] = "0x"+components[i];

long mostSigBits = Long.decode(components[0]).longValue();

mostSigBits <<= 16;

mostSigBits |= Long.decode(components[1]).longValue();

mostSigBits <<= 16;

mostSigBits |= Long.decode(components[2]).longValue();

long leastSigBits = Long.decode(components[3]).longValue();

leastSigBits <<= 48;

leastSigBits |= Long.decode(components[4]).longValue();

return new UUID(mostSigBits, leastSigBits);

}

我们可以看到,除了计算连字符限制的组数之外,没有其他验证方法。 它只需要这些组,然后将它们移到位置。 您已经在第一组前面添加了额外的字符,这是最重要的部分。 首先对其进行解析和存储,然后再上移一次,直到占据最重要的部分。 现在,所有比假定的还要远的位都被推出long的限制,因此它们被完全忽略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值