それはcorelibsによって提供されますので、私は、Javaでuuid5の様々な実装をテストしようとすると、リファレンス実装としてのpythonを使用しています。Pythonのuuid5は、名前空間が最初のパラメータとして渡されたUUIDが必要ですようしかし、それが見えます。「なし」動作しません。しかし、Javaのcom.fasterxml.uuid.Generators nameBasedGeneratorは、名前空間のための「ヌル」を受け入れます。どちらが正しい?uuid5世代のための「グローバル」または「デフォルト」の名前空間の概念があります。
uuid5世代のための「グローバル」または「デフォルト」の名前空間の概念があります。
UUID RFCには、このような概念はありません。名前空間は、使用している名前が描画されるからネーミングシステムを表しています。それは、「グローバル」名前空間について話をするのは意味がありませんので、普遍的なネーミングシステムは、ありません。いくつかの標準的な名前空間のUUIDは、しかし、があります。彼らはで文書化されているRFC 4122付録C
Pythonのuuid5は、名前空間が最初のパラメータとして渡されたUUIDが必要です。
None
動作しないでしょう。しかし、Javaのはcom.fasterxml.uuid.Generators nameBasedGenerator
受け入れるnull
の名前空間を
com.fasterxml.uuid.Generators
APIは、標準のJava APIではありません。UUIDのための標準のJava APIはあるjava.util.UUID
が、それはタイプ5 UUIDの生成をサポートしていません。
どちらが正しい?
私はのコードを見てcom.fasterxml.uuid.Generators
。場合はnull
、名前空間が提供され、それが名前の名前空間のUUIDを連結するステップをスキップします。これは、に定めるタイプ3月5日のアルゴリズムでアコードいないRFC 4122のセクション4.3ので、技術的には正しくありません。
しかし、RFCからこの偏差は、何かを壊すべきではありません。それはあなたが通常タイプ3月5日のUUIDのために期待されるよりも高いレートでUUID衝突を生成しません。私は、この拡張機能(非標準ではあるが)無害呼び出すように傾斜させることでしょう。
そう ...
名前空間はuuid5実装では必須ですか?
RFCは、名前空間が必須であること、またはそれが提供されていない場合はどうするか状態しません。一般的にはUUID生成APIは、特にこのAPIの動作があるという範囲を超えて、現在書かれたRFCの。