JUG คือชุดของคลาส Java สำหรับการทำงานกับ UUID: การสร้าง UUID โดยใช้วิธีมาตรฐานใดๆ การส่งออกอย่างมีประสิทธิภาพ การเรียงลำดับ และอื่นๆ มันสร้าง UUID ตามข้อกำหนด UUID (RFC-4122) (ดูหน้า Wikipedia UUID สำหรับคำอธิบายเพิ่มเติม)
JUG เขียนโดย Tatu Saloranta ([email protected]) เดิมในปี 2002 และได้รับการอัปเดตตลอดหลายปีที่ผ่านมา นอกจากนี้ บุคคลอื่นๆ จำนวนมากยังได้ช่วยแก้ไขข้อบกพร่องและใช้คุณสมบัติใหม่: โปรดดู release-notes/CREDITS
สำหรับรายการทั้งหมด
JUG ได้รับอนุญาตภายใต้ Apache License 2.0
JUG รองรับทั้งเวอร์ชัน "คลาสสิก" ที่กำหนดใน RFC 4122]:
1
: เวลา/สถานที่ - ตามเวลา3
และ 5
: ชื่อแฮช - ตาม4
: ตัวเลขสุ่ม - ตามและข้อเสนอใหม่ (ในปี 2565-2567) (ดู uuid6 และ RFC-4122 ทวิ) ตัวแปร:
6
: ตัวแปรที่เรียงลำดับใหม่ของเวอร์ชัน 1
(พร้อมการเรียงลำดับพจนานุกรม)7
: Unix-timestamp + ตัวแปรตามแบบสุ่ม (รวมถึงลำดับพจนานุกรมด้วย) พิมพ์ | สถานะ |
---|---|
สร้าง (CI) | |
สิ่งประดิษฐ์ | |
การสนับสนุน OSS | |
Javadocs | |
ความครอบคลุมของรหัส (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
ที่เข้ากันได้กับ JDK9+ โดยมีชื่อโมดูลเป็น 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) จะพยายามพิจารณาว่าอินเทอร์เฟซเครือข่ายใดที่สอดคล้องกับเส้นทางเริ่มต้นสำหรับการรับส่งข้อมูลเครือข่ายขาออกทั้งหมด และใช้สิ่งนั้นสำหรับการสร้างตัวสร้างตามเวลา นี่อาจเป็นทางเลือกที่ดีสำหรับสถานการณ์การใช้งานทั่วไป หากคุณต้องการตัวสร้าง UUID เวอร์ชัน 1
TimeBasedGenerator gen = Generators . defaultTimeBasedGenerator ();
UUID uuid = gen . generate ();
UUID anotherUuid = gen . generate ();
ตัวสร้างมีความปลอดภัยสำหรับเธรดอย่างสมบูรณ์ ดังนั้นอินสแตนซ์เดียวจึงสามารถแชร์ระหว่างหลายเธรดได้
Javadocs สำหรับข้อมูลเพิ่มเติมสามารถพบได้จาก Project Wiki
java.util.UUID
เป็นไบต์[] บางครั้งคุณอาจต้องการแปลงจาก java.util.UUID
เป็นอนุกรมภายนอก: ตัวอย่างเช่นเป็น String
s หรืออาร์เรย์ไบต์ ( 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
จาก String, byte[] ค่า 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
และรับคำแนะนำแบบเต็ม แต่หากต้องการสร้าง UUID แบบสุ่ม 5 รายการ คุณจะต้องใช้:
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 และใหม่กว่าต้องใช้ JDK 1.6 ในการทำงาน โดยส่วนใหญ่เพื่อให้สามารถเข้าถึงที่อยู่ MAC ของอีเทอร์เน็ตในเครื่องได้ เวอร์ชันก่อนหน้า (3.0 และก่อนหน้า) ใช้งานได้บน 1.4 (ซึ่งแนะนำ java.util.UUID
)
JUG เวอร์ชัน 5.0 และใหม่กว่าต้องใช้ JDK 8 ในการทำงาน
java.util.UUID
ของ JDK มีข้อบกพร่องในการใช้งาน compareTo()
ซึ่งใช้การเปรียบเทียบแบบไร้เดียงสาของค่า 64 บิต สิ่งนี้ไม่ทำงานอย่างที่คาดไว้ เนื่องจากเนื้อหาที่ซ่อนอยู่นั้นไม่ได้ลงนามเพื่อวัตถุประสงค์ทั้งหมด ตัวอย่างเช่น UUID สองตัว:
7f905a0b-bb6e-11e3-9e8f-000000000000
8028f08c-bb6e-11e3-9e8f-000000000000
จะถูกเรียงลำดับด้วยอันที่สองก่อน เนื่องจากมีส่วนขยายเครื่องหมาย (ค่าที่สองถือเป็นค่าลบ และด้วยเหตุนี้ "เล็กกว่า")
ด้วยเหตุนี้ คุณจึงควรใช้ตัวเปรียบเทียบภายนอกเสมอ เช่น com.fasterxml.uuid.UUIDComparator
ซึ่งใช้ลำดับการเรียงลำดับที่คาดไว้ ซึ่งเป็นการเรียงลำดับแบบธรรมดาที่ไม่ได้ลงนาม ซึ่งเหมือนกับการเรียงลำดับพจนานุกรม (ตามตัวอักษร) ของ UUID (เมื่อสมมติว่าใช้อักษรตัวพิมพ์ใหญ่เหมือนกัน) .
มีให้เป็นส่วนหนึ่งของการสมัครสมาชิก Tidelift
ผู้ดูแล java-uuid-generator
และแพ็คเกจอื่นๆ หลายพันรายการกำลังทำงานร่วมกับ Tidelift เพื่อให้การสนับสนุนเชิงพาณิชย์และการบำรุงรักษาสำหรับการพึ่งพาโอเพ่นซอร์สที่คุณใช้ในการสร้างแอปพลิเคชันของคุณ ประหยัดเวลา ลดความเสี่ยง และปรับปรุงประสิทธิภาพของโค้ด ในขณะเดียวกันก็จ่ายค่าตอบแทนให้กับผู้ดูแลตามที่คุณใช้ เรียนรู้เพิ่มเติม
สำหรับรายงานข้อบกพร่องและการแก้ไขแบบง่ายๆ และการร้องขอคุณสมบัติ โปรดใช้โปรเจ็กต์ Issue Tracker ยกเว้นปัญหาด้านความปลอดภัยซึ่งเราแนะนำให้ยื่นเอกสารติดต่อด้านความปลอดภัยของ Tidelift (หมายเหตุ: คุณไม่จำเป็นต้องเป็นสมาชิกจึงจะทำเช่นนี้ได้)
มีตัวสร้าง UUID อื่น ๆ อีกมากมายที่เปิดเผยต่อสาธารณะ ตัวอย่างเช่น:
java.util.UUID
ไว้ตั้งแต่ 1.4 แต่ละเว้นวิธีการสร้าง (โดยเฉพาะเวลา/สถานที่) มีประสิทธิภาพต่ำกว่ามาตรฐานสำหรับการดำเนินการหลายอย่าง และใช้การเปรียบเทียบในลักษณะที่ไม่มีประโยชน์โปรดทราบว่าแม้ว่าบางแพ็คเกจจะอ้างว่าเร็วกว่าแพ็คเกจอื่น แต่ก็ยังไม่ชัดเจน:
ดังนั้นจึงมักเลือกตามความเสถียรของแพ็คเกจและ API