在python中从java代码复制uuid

2024-06-30 08:42:36 发布

您现在位置:Python中文网/ 问答频道 /正文

在Java应用程序中,文件名是从使用函数UUID.nameUUIDFromBytes创建的蛋白质序列(例如ttccpsivarsnvcrlpgtpeaictytgciipgatcpgdyan)生成的UUID。这将导致UUID c6a0deb5-0c4f-3961-9d19-3f0fde0517c2。在

UUID.namedUUIDFromBytes不将名称空间作为参数,而在python中,uuid.uuid3则是这样。根据What namespace does the JDK use to generate a UUID with nameUUIDFromBytes?,名称空间应该作为名称的一部分进行传递,但是已经不可能再更改java代码了。在

有没有一种方法可以在python代码中创建一个自定义名称空间,这样它将生成与Java代码相同的UUID?在


Tags: 函数代码名称应用程序参数uuid文件名空间
2条回答

^{}只接受一个参数,它应该是名称空间和名称的串联,就像您所说的那样。namespace参数应该是UUID,而且据我所知,它们没有定义null值。在

一个“nulluuid”可以像这样传递给Python的^{}。只要名称空间有一个bytes属性(用python2和Python 3测试过),这个方法就可以工作:

class NULL_NAMESPACE:
    bytes = b''
uuid.uuid3(NULL_NAMESPACE, 'TTCCPSIVARSNFNVCRLPGTPEAICATYTGCIIIPGATCPGDYAN')
# returns: UUID('c6a0deb5-0c4f-3961-9d19-3f0fde0517c2')

如果这是有帮助的,如果您想做Java方面的工作,可以使用以下方法:

UUID namespaceUUID = UUID.fromString("9db60607-6b12-41eb-8848-eafd26681583");
String myString = "sometextinhere";

ByteBuffer buffer = ByteBuffer.wrap(new byte[16 + myString.getBytes().length]);
buffer.putLong(namespaceUUID.getMostSignificantBits());
buffer.putLong(namespaceUUID.getLeastSignificantBits());
buffer.put(myString.getBytes());

byte[] uuidBytes = buffer.array();

UUID myUUID = UUID.nameUUIDFromBytes(uuidBytes);

这将提供与以下Python相同的输出UUID:

^{pr2}$

相关问题 更多 >