JUG は、標準メソッドを使用した UUID の生成、効率的な出力、ソートなど、UUID を操作するための Java クラスのセットです。 UUID 仕様 (RFC-4122) に従って UUID を生成します (詳細については、Wikipedia の UUID ページを参照してください)。
JUG は、もともと 2002 年に Tatu Saloranta ([email protected]) によって作成され、長年にわたって更新されてきました。さらに、他の多くの人々がバグ修正や新機能の実装に協力してくれました。完全なリストについてはrelease-notes/CREDITS
参照してください。
JUG は Apache License 2.0 に基づいてライセンスされています。
JUG は、RFC 4122 で定義されている両方の「クラシック」バージョンをサポートします]:
1
: 時間/場所ベース3
および5
: 名前ハッシュベース4
: 乱数ベースそして新しく(2022年から2024年に)提案された(uuid6とRFC-4122 bisを参照)バリアント:
6
: バージョン1
の並べ替えられたバリアント (辞書編集的な順序付け)7
: Unix タイムスタンプ + ランダムベースのバリアント (辞書編集的な順序も使用) タイプ | 状態 |
---|---|
ビルド(CI) | |
アーチファクト | |
OSS スポンサーシップ | |
Javadoc | |
コードカバレッジ (5.x) | |
OpenSSF スコア |
JUG は、コマンドライン ツール (クラスcom.fasterxml.uuid.Jug
経由) として、またはプラグイン可能なコンポーネントとして使用できます。
Maven 座標は次のとおりです。
< dependency >
< groupId >com.fasterxml.uuid</ groupId >
< artifactId >java-uuid-generator</ artifactId >
< version >5.1.0</ version >
</ dependency >
グラドル:
implementation ' com.fasterxml.uuid:java-uuid-generator:5.1.0 '
JUG の唯一の依存関係はログ ライブラリです。
log4j
が使用されます (ランタイム依存関係)。slf4j
API が使用されます。ログの実装はアプリケーションの呼び出しによって提供されます。バージョン3.2.0
以降、JUG はcom.fasterxml.uuid
というモジュール名で JDK9+ 互換のmodule-info.class
を定義します。
直接ダウンロードするには、Project Wiki をチェックしてください。
JUG の元の使用例は、UUID 値の生成でした。これは、まず使用するジェネレーターの種類を選択し、次にそのgenerate()
メソッドを呼び出すことによって行われます。例えば:
UUID uuid = Generators . timeBasedGenerator (). generate (); // Version 1
UUID uuid = Generators . randomBasedGenerator (). generate (); // Version 4
UUID uuid = Generators . nameBasedgenerator (). generate ( "string to hash" ); // Version 5
// With JUG 4.1+: support for https://github.com/uuid6/uuid6-ietf-draft versions 6 and 7:
UUID uuid = Generators . timeBasedReorderedGenerator (). generate (); // Version 6
UUID uuid = Generators . timeBasedEpochGenerator (). generate (); // Version 7
// With JUG 5.0 added variation:
UUID uuid = Generators . timeBasedEpochRandomGenerator (). generate (); // Version 7 with per-call random values
ジェネレーターをカスタマイズしたい場合は、ジェネレーターのインスタンスを保持することもできます。
TimeBasedGenerator gen = Generators . timeBasedGenerator ( EthernetAddress . fromInterface ());
UUID uuid = gen . generate ();
UUID anotherUuid = gen . generate ();
マシンに標準の IP ネットワーク設定がある場合、 Generators.defaultTimeBasedGenerator
(JUG 4.2 で追加) ファクトリ メソッドは、どのネットワーク インターフェイスがすべての送信ネットワーク トラフィックのデフォルト ルートに対応するかを判断し、それを時間ベースのジェネレーターの作成に使用します。バージョン 1 の UUID ジェネレーターが必要な場合、一般的な使用シナリオではこれが適切な選択となる可能性があります。
TimeBasedGenerator gen = Generators . defaultTimeBasedGenerator ();
UUID uuid = gen . generate ();
UUID anotherUuid = gen . generate ();
ジェネレーターは完全にスレッドセーフであるため、単一のインスタンスを複数のスレッド間で共有できます。
詳細については、Project Wiki から Javadoc を参照してください。
java.util.UUID
値を byte[] に変換する場合によっては、 java.util.UUID
から外部シリアル化、たとえばString
またはバイト配列 ( byte[]
) に変換したい場合があります。 String
への変換はUUID.toString()
(JDK によって提供される) を使用すると簡単ですが、 byte[]
に変換するための同様の機能はありません。
ただし、 UUIDUtil
クラスは効率的な変換のためのメソッドを提供します。
byte[] asBytes = UUIDUtil.asByteArray(uuid);
// or if you have longer buffer already
byte[] outputBuffer = new byte[1000];
// append at position #100
UUIDUtil.toByteArray(uuid, outputBuffer, 100);
java.util.UUID
値を構築するUUID
値は java String
またはbyte[]
(バイト配列) として渡されることが多く、実際のjava.util.UUID
インスタンスに取得するには変換が必要です。 JUG には、クラスUUIDUtil
(パッケージcom.fasterxml.uuid.impl
) 経由で利用できる最適化された変換機能があり、次のように使用されます。
UUID uuidFromStr = UUIDUtil.uuid("ebb8e8fe-b1b1-11d7-8adb-00b0d078fa18");
byte[] rawUuidBytes = ...; // byte array with 16 bytes
UUID uuidFromBytes = UUIDUtil.uuid(rawUuidBytes)
JDK には次のようにString
からUUID
構築する機能があることに注意してください。
UUID uuidFromStr = UUID.fromString("ebb8e8fe-b1b1-11d7-8adb-00b0d078fa18");
JUG バージョンよりもかなり遅いです。詳細については、「Java UUID.fromString() のパフォーマンスの測定」を参照してください。
target/
の下にビルドされた JUG jar :
target/java-uuid-generator-5.1.0-SNAPSHOT.jar
単純なコマンドライン UUID 生成ツールとしても使用できます。
使用状況を確認するには、次のようなことができます。
java -jar target/java-uuid-generator-5.1.0-SNAPSHOT.jar
完全な手順を取得できますが、5 つのランダムベースの UUID を生成するには、次のようにします。
java -jar target/java-uuid-generator-5.1.0-SNAPSHOT.jar -c 5 r
(ここで、 -c
(または--count
) は生成する UUID の数を意味し、 r
ランダムベースのバージョンを意味します)
注: この機能は JUG 4.1 の時点で含まれています。以前のバージョンでは、Jar メタデータが「Main-Class」を指定していないため、少し長い呼び出しが必要になります。その場合は、使用する必要があります
java -cp target/java-uuid-generator-5.1.0-SNAPSHOT.jar com.fasterxml.uuid.Jug -c 5 r
JUG バージョン 3.1 以降では、主にローカル イーサネット MAC アドレスにアクセスできるようにするために、JDK 1.6 が動作する必要があります。以前のバージョン (3.0 以前) は 1.4 ( java.util.UUID
が導入されました) で動作しました。
JUG バージョン 5.0 以降が動作するには、JDK 8 が必要です。
JDK のjava.util.UUID
には、64 ビット値の単純な比較を使用するcompareTo()
の実装に欠陥があります。基礎となるコンテンツがあらゆる目的で署名されていないことを考えると、これは期待どおりに機能しません。たとえば、2 つの UUID は次のようになります。
7f905a0b-bb6e-11e3-9e8f-000000000000
8028f08c-bb6e-11e3-9e8f-000000000000
符号拡張により、2 番目の値が最初に順序付けされます (2 番目の値は負であると見なされ、したがって「小さい」と見なされます)。
このため、 com.fasterxml.uuid.UUIDComparator
などの外部コンパレーターを常に使用する必要があります。これは、単純な符号なしソートである予期されるソート順序を実装します。これは、UUID の辞書編集 (アルファベット順) ソートと同じです (大文字小文字が一様であると仮定した場合)。 。
Tidelift サブスクリプションの一部として利用できます。
java-uuid-generator
および他の何千ものパッケージのメンテナは、Tidelift と協力して、アプリケーションの構築に使用するオープンソースの依存関係に対する商用サポートとメンテナンスを提供しています。使用する正確な依存関係の保守者に料金を支払いながら、時間を節約し、リスクを軽減し、コードの健全性を向上させます。もっと詳しく知る。
単純なバグ レポートと修正、および機能リクエストについては、Tidelift セキュリティ コンタクトを提出することをお勧めするセキュリティ関連の問題を除き、プロジェクト Issue Tracker を使用してください (注: これを行うためにサブスクライバーである必要はありません)。
他にも公開されている UUID ジェネレーターが多数あります。例えば:
java.util.UUID
が含まれていますが、生成メソッド (特に時間/場所ベースのもの) が省略されており、多くの操作で標準以下のパフォーマンスがあり、無駄な方法で比較が実装されています。一部のパッケージは他のパッケージよりも高速であると主張していますが、明確ではないことに注意してください。
したがって、多くの場合、パッケージと API の安定性に基づいて選択することが最善です。