JUG عبارة عن مجموعة من فئات Java للعمل مع UUIDs: إنشاء UUIDs باستخدام أي من الطرق القياسية، والإخراج بكفاءة، والفرز، وما إلى ذلك. يقوم بإنشاء UUIDs وفقًا لمواصفات UUID (RFC-4122) (راجع صفحة Wikipedia UUID لمزيد من التوضيح)
تمت كتابة JUG بواسطة Tatu Saloranta ([email protected]) في الأصل في عام 2002 وتم تحديثه على مر السنين. بالإضافة إلى ذلك، ساعد العديد من الأفراد الآخرين في إصلاح الأخطاء وتنفيذ ميزات جديدة: يرجى الاطلاع على release-notes/CREDITS
للحصول على القائمة الكاملة.
JUG مرخص بموجب ترخيص Apache 2.0.
يدعم JUG كلا الإصدارين "الكلاسيكيين" المحددين في RFC 4122]:
1
: الوقت/الموقع - على أساس3
و 5
: اسم على أساس التجزئة4
: رقم عشوائي - على أساسوالمتغيرات المقترحة حديثًا (في 2022-2024) (راجع uuid6 و RFC-4122 bis):
6
: نسخة مُعاد ترتيبها من الإصدار 1
(مع الترتيب المعجمي)7
: الطابع الزمني لنظام Unix + المتغير العشوائي (أيضًا مع الترتيب المعجمي) يكتب | حالة |
---|---|
البناء (CI) | |
قطعة أثرية | |
رعاية OSS | |
جافادوكس | |
تغطية الكود (5.x) | |
نقاط OpenSSF |
يمكن استخدام JUG كأداة لسطر الأوامر (عبر الفئة com.fasterxml.uuid.Jug
) أو كمكون قابل للتوصيل.
إحداثيات مافن هي:
< 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 module-info.class
، باسم الوحدة com.fasterxml.uuid
.
للتنزيل المباشر، راجع 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 ();
المولدات آمنة تمامًا لمؤشرات الترابط، لذلك يمكن مشاركة مثيل واحد بين سلاسل رسائل متعددة.
يمكن العثور على Javadocs لمزيد من المعلومات من Project Wiki.
java.util.UUID
إلى بايت[] في بعض الأحيان قد ترغب في التحويل من java.util.UUID
إلى تسلسل خارجي: على سبيل المثال، مثل String
s أو byte arrays ( 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
s أو byte[]
s (مصفوفات البايت)، ويلزم التحويل للوصول إلى مثيلات 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 لديه وظيفة إنشاء UUID
من String
، كما يلي:
UUID uuidFromStr = UUID.fromString("ebb8e8fe-b1b1-11d7-8adb-00b0d078fa18");
إنه أبطأ من إصدار JUG: لمزيد من المعلومات، اقرأ قياس أداء Java UUID.fromString().
جرة JUG بنيت تحت target/
:
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 لم تحدد "الفئة الرئيسية". إذا كان الأمر كذلك، سوف تحتاج إلى استخدام
java -cp target/java-uuid-generator-5.1.0-SNAPSHOT.jar com.fasterxml.uuid.Jug -c 5 r
تتطلب إصدارات JUG 3.1 والإصدارات الأحدث تشغيل JDK 1.6، لتتمكن في الغالب من الوصول إلى عنوان Ethernet المحلي MAC. عملت الإصدارات السابقة (3.0 وما قبلها) على الإصدار 1.4 (الذي قدم java.util.UUID
).
تتطلب إصدارات JUG 5.0 والإصدارات الأحدث JDK 8 للعمل.
يحتوي java.util.UUID
الخاص بـ JDK على خلل في تنفيذ compareTo()
، والذي يستخدم مقارنة ساذجة لقيم 64 بت. لا يعمل هذا كما هو متوقع، نظرًا لأن المحتوى الأساسي غير موقع لجميع الأغراض. على سبيل المثال اثنين من UUIDs:
7f905a0b-bb6e-11e3-9e8f-000000000000
8028f08c-bb6e-11e3-9e8f-000000000000
سيتم ترتيبها بالقيمة الثانية أولاً، نظرًا لامتداد الإشارة (تعتبر القيمة الثانية سالبة، وبالتالي "أصغر").
ولهذا السبب، يجب عليك دائمًا استخدام المقارنة الخارجية، مثل com.fasterxml.uuid.UUIDComparator
، الذي ينفذ ترتيب الفرز المتوقع وهو فرز بسيط غير موقّع، وهو أيضًا نفس الفرز المعجمي (الأبجدي) لمعرفات UUID (عند افتراض الكتابة بالأحرف الكبيرة بشكل موحد) .
متاح كجزء من اشتراك Tidelift.
يعمل القائمون على صيانة java-uuid-generator
وآلاف الحزم الأخرى مع Tidelift لتقديم الدعم التجاري والصيانة للتبعيات مفتوحة المصدر التي تستخدمها لبناء تطبيقاتك. يمكنك توفير الوقت وتقليل المخاطر وتحسين سلامة التعليمات البرمجية، مع الدفع لمشرفي التبعيات الدقيقة التي تستخدمها. يتعلم أكثر.
للحصول على تقارير الأخطاء والإصلاحات البسيطة وطلبات الميزات، يرجى ببساطة استخدام أداة تعقب مشكلات المشروعات، باستثناء المشكلات المتعلقة بالأمان والتي نوصي بإرسال جهة اتصال أمنية لـ Tidelift (ملاحظة: ليس من الضروري أن تكون مشتركًا للقيام بذلك).
هناك العديد من مولدات UUID الأخرى المتاحة للجمهور. على سبيل المثال:
java.util.UUID
منذ الإصدار 1.4، ولكنه يتجاهل طرق الإنشاء (خاصة الطرق المعتمدة على الوقت/الموقع)، وله أداء دون المستوى في العديد من العمليات وينفذ المقارنة بطريقة غير مجدية.لاحظ أنه على الرغم من أن بعض الحزم تدعي أنها أسرع من غيرها، إلا أن الأمر ليس واضحًا:
لذلك غالبًا ما يكون من الأفضل الاختيار بناءً على استقرار الحزم وواجهة برمجة التطبيقات (API).