为什么uuid不会重复,java foreach

在uuuid.fromstring…)方法中,你有这个:

publicstaticuuidfromstring 字符串名称)。

string [ ] components=name.split ‘-‘;

ifcomponents.length!=5)

thrownewillegalargumentexception invaliduuidstring : ) name );

forintI=0; i5; I )

组件[ I ]=’0x ‘组件[ I ];

longmostsigbits=long.decode components [0] ).longValue );

mostSigBits=16;

mostsigbits|=long.decode components [1].long value );

mostSigBits=16;

mostsigbits|=long.decode components [2].long value );

longleastsigbits=long.decode components [3] ).longValue );

leastSigBits=48;

leastsigbits|=long.decode components [4] ).longValue );

返回新uuid mostsigbits,leastSigBits );

}

首先将UUID的各个部分分为组件,然后创建两个长整型。 在这里,我们通过添加第一个字符只更改了UUID的第一个组件。 UUID字符串例如是“12345894 ff97a-039 B- 47fe-8a 72-950 b 7766 d 50 c”。 因此,第一个组件是“

longmostsigbits=long.decode components [0] ).longValue );

那么,就可以得到“320256540146042”。 实际的HEX显示为“12345894ff97a”。 然后,有将长度16向左移动的位操作:

mostSigBits=16;

因此,“2541588541301456896”的实际HEX显示为“2345894ff97a0000”,并显示“移动了16位,所以4个十六进制字符”。 然后,如果你开始看看发生了什么,因为长格式只有64位,移位的时候会输一点。 这里第一个字符“1”丢失了。 它开放了空间

mostsigbits|=long.decode components [1].long value );

这将导致“2541588541301457819”,实际HEX显示“2345894ff97a039b”,并再次将长度16位左移。

mostSigBits=16;

这将导致“-8552342864911466496”,实际的HEX显示为“894ff97a039b0000”。 这里,由于长度为64位,所以所有开头字符都将丢失。

不需要说明方法的其余部分。 最后,大多数位置为“894ff97a039b47fe”,最小位置为“8a72950b7766d50c”。 请注意,调用UUID.fromString时,添加到UUID的所有第一个字符都将丢失。 ) ) )因为只考虑最后

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注