জাভাতে একটি জিইউইডি তৈরি করুন


377

জাভাতে জিইউইডি তৈরির কয়েকটি সেরা উপায় কী?


3
স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ৩২৪৪৪৩ / জেনারেট-ইউইড- ইন- জাভাতে জিআইডি সংঘর্ষের বিষয়ে আরও প্রশ্ন , তবে জাভা টেক স্ট্যাকের কোনও জিইউইডিটির সমতুল্য কী, যা (আমার মনে হয়) আরও বেশি এই প্রশ্নের ফোকাস।
জন অ্যাডামস

উত্তর:


346

কটাক্ষপাত আছে UUID বর্গজাভা 5 এবং তার পরে ।

উদাহরণ স্বরূপ:


7
যদি আপনি কালেব ব্রাসির মতো উদাহরণ অন্তর্ভুক্ত করেন তবে আপনার ভাল উত্তরটি আরও ভাল।
জিরো 3

অ্যান্ড্রয়েড স্টুডিও 2.3 এ এবং কমপক্ষে 21 ও এর বেশি এপিআই স্তরে কাজ করে। সম্ভবত আরও পিছনে।
রাদেবাস

5
টিএল; ডিআর ... "ইউইউডিউইউইডি = ইউইউডি.আরেন্ডম ইউইউডি ();"
আভিরাম ফায়ারবার্গার

419

java.util.UUID.randomUUID();


2
এটি কি পুনরাবৃত্তি করতে পারে? কারণ গাইড কখনই পুনরাবৃত্তি করবে না
angel ই

3
@ অ্যাঞ্জেল হ্যাঁ, UUID.randomUUIDপদ্ধতিটির দ্বারা নকলটি ফিরিয়ে দেওয়া তাত্ত্বিকভাবে সম্ভব , তবে এটি মোটেও বাস্তব উদ্বেগের বিষয় নয় । ওরাকল / ওপেনজেডিকে বাস্তবায়ন ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী এলোমেলো নম্বর জেনারেটর ব্যবহার করে। এটি দেওয়া হয়েছে এবং কোনও ইউইউইডিতে এতগুলি বিট দ্বারা দেওয়া জ্যোতির্বিজ্ঞানের পরিসীমা দেওয়া, আপনি আপনার অ্যাপ্লিকেশনটিতে এই জাতীয় লক্ষ লক্ষ মান উত্পন্ন করতে পারেন এবং এখনও ভাল ঘুমাতে পারেন। "স্থান এবং সময়", [1] ম্যাক ঠিকানা বা নাম এবং [২] বর্তমান তারিখ-সময়কে সীমাবদ্ধতা হিসাবে ব্যবহার করার কারণে অন্য কোনও রূপের ব্যবহারের ফলে সংঘর্ষের সম্ভাবনা আরও শূন্যের কাছাকাছি পৌঁছে যায়।
তুলসী বাউরকের

@ রেনিপেট এহ, আপনি যদি সেই অদ্ভুত হন এবং নতুন তৈরি করার সময় আপনি ইতিমধ্যে ব্যবহৃত আইডির তালিকায় অ্যাক্সেস পেয়ে থাকেন তবে আপনি কেবলমাত্র একটি নতুন তৈরি করবেন whileযতক্ষণ না আপনি নিজের তালিকার ভিতরে না পেয়ে থাকেন: পি
নায়ারগডস

1
ওরাকল ক্রিপ্টো র্যান্ডম নম্বর জেনারেটরটি সাধারণত একটি এলোমেলো বীজের সাথে একটি পিআরএনজি হয়। এলোমেলো বীজ সাধারণত ওএস দ্বারা সরবরাহিত "এন্ট্রপি" উত্স ব্যবহার করে প্রাপ্ত হয়। যদি আপনি সেই উত্সকে হ্রাস করতে বা আপস করতে পারেন তবে একই সংখ্যার উত্পাদনকারী কোনও ক্রিপ্টো র্যান্ডম সংখ্যার জেনারেটরের সম্ভাবনা বৃদ্ধি পেয়েছে। এটিও লক্ষণীয় যে কয়েকটি (যেমন ভার্চুয়ালাইজড) প্ল্যাটফর্মগুলিতে ওএস এনট্রপির বাইরে চলে যেতে পারে। এটির মতো কাজ করার জন্য "ডজি হ্যাকস" রয়েছে তবে তারা এন্ট্রপির গুণমানকে অবনমিত করে।
স্টিফেন সি

এটি কেবল একাডেমিক উদ্বেগ নয়। আমি একজন (দেখেছ যাচাই না !! ) দাবি যে কেউ হয়নি র্যান্ডম ভিত্তিক UUID জানা অনন্য নয় হচ্ছে সমস্যায় পরতে।
স্টিফেন সি

31

এটি নির্ভর করে যে আপনি কোন ধরণের ইউইউডি চান।

  • স্ট্যান্ডার্ড জাভা UUIDক্লাসটি সংস্করণ 4 (এলোমেলো) ইউইউডি উত্পন্ন করে । ( আপডেট - সংস্করণ 3 (নাম) ইউআইডিগুলিও উত্পন্ন করা যেতে পারে)) এটি অন্যান্য রূপগুলিও পরিচালনা করতে পারে, যদিও এটি সেগুলি উত্পন্ন করতে পারে না। (এই ক্ষেত্রে, "হাতল" অর্থ কনস্ট্রাক্ট UUIDথেকে দৃষ্টান্ত long, byte[]বা Stringউপস্থাপনা, এবং কিছু উপযুক্ত accessors প্রদান।)

  • জাভা UUID জেনারেটর (| JUG) "হিসাবে দ্বারা সংজ্ঞায়িত সব 3 'অফিসিয়াল' UUID ধরনের বাস্তবায়ন প্রচরেই সমর্থন করার জন্য বোঝায় যা RFC-4122 " ... যদিও বোঝায় যা RFC আসলে 4 ধরনের সংজ্ঞায়িত এবং 5 ম টাইপ উল্লেখ করা হয়।

ইউআইডি টাইপ এবং বৈকল্পিক সম্পর্কে আরও তথ্যের জন্য, উইকিপিডিয়ায় একটি ভাল সংক্ষিপ্তসার রয়েছে , এবং গৌরবহীন বিবরণগুলি আরএফসি 4122 এবং অন্যান্য বৈশিষ্ট্যগুলিতে রয়েছে।


1
পুরোপুরি সত্য নয়, এটি নাম ভিত্তিক (সংস্করণ 3) UUID.nameUUIDFromBytes(byte[] name)
ইউআইডিগুলিও

আমি সংশোধন করেছি. আমি জাভাডোক বর্ণনার উপর নির্ভর করেছি যা বলেছে " নির্দিষ্ট বাইট অ্যারের ভিত্তিতে টাইপ 3 (নাম ভিত্তিক)
স্টিফেন সি

আমি পোস্টটি সঠিক বলে মনে করি না। UUID জাভা ডক্স রাষ্ট্র কন্সট্রাকটর একটি টাইপ 2 বৈকল্পিক, র্যান্ডম না জেনারেট করে। টাইপ 3 ব্যবহারের জন্য public static UUID nameUUIDFromBytes(byte[] name)। টাইপ 4 ব্যবহারের জন্য public static UUID randomUUID()। প্রকার 1 জেডিকে শ্রেণিতে উপলব্ধ নয়।
সল্টিরবার্টফেস

না। আমি মনে করি এটি বেশ সঠিকভাবে পেয়েছি। জাভাডোকস জানিয়েছে: "যদিও কনস্ট্রাক্টররা ইউইউডি (যে নীচে বর্ণিত) এর কোনও বৈকল্পিক তৈরি করার অনুমতি দেয়।" এবং 4 রূপগুলি নীচে তালিকাভুক্ত করা হয়েছে, 1 টাইপ সহ। প্রকৃতপক্ষে, জাভাদোক পড়ুনclockSequence()
স্টিফেন সি

27

একটি উদাহরণ সহ কেবল মার্ক বাইয়ার্সের উত্তরটি প্রসারিত করতে:

import java.util.UUID;

public class RandomStringUUID {
    public static void main(String[] args) {
        UUID uuid = UUID.randomUUID();
        System.out.println("UUID=" + uuid.toString() );
    }
}

6

অন্যান্য উত্তরসমূহ সঠিক, বিশেষ করে হয় এই এক দ্বারা স্টিফেন সি

জাভা বাইরে পৌঁছনো

জাভাতে একটি ইউআইডি মান তৈরি করা সংস্করণ 4 (এলোমেলো) এর মধ্যে সীমাবদ্ধ is সুরক্ষা উদ্বেগের কারণে ।

আপনি যদি ইউআইডি-র অন্যান্য সংস্করণগুলি চান, তবে আপনার জাভা অ্যাপ্লিকেশনটি জাভিএমের বাইরের কাছে পৌঁছে দিয়ে ইউআইডিগুলি উত্পন্ন করার জন্য একটি এভিনিউ হ'ল :

  • কমান্ড-লাইন ইউটিলিটি
    প্রায় প্রতিটি অপারেটিং সিস্টেমের সাথে বান্ডিল হয়।
    উদাহরণস্বরূপ, uuidgenম্যাক ওএস এক্স, বিএসডি এবং লিনাক্সে পাওয়া গেছে।
  • ডাটাবেস সার্ভার ডাটাবেস সার্ভারে উত্পন্ন একটি ইউআইডি পুনরুদ্ধার করতে জেডিবিসি
    ব্যবহার করুন । উদাহরণস্বরূপ, এক্সটেনশনটি প্রায়শই পোস্টগ্রাসের সাথে বান্ডিল হয় । এই এক্সটেনশানটি সংস্করণ 1, 3 এবং 4 টি মান এবং অতিরিক্ত কয়েকটি বৈকল্পিক উত্পন্ন করতে পারে:
    uuid-ossp
    • uuid_generate_v1mc() - একটি সংস্করণ 1 ইউইউডি তৈরি করে তবে কম্পিউটারের আসল ম্যাক ঠিকানার পরিবর্তে এলোমেলো মাল্টিকাস্ট ম্যাক ঠিকানা ব্যবহার করে।
    • uuid_generate_v5(namespace uuid, name text) - একটি সংস্করণ 5 ইউইউডি উত্পন্ন করে, যা হ্যাশিং পদ্ধতি হিসাবে SHA-1 ব্যতীত ব্যবহৃত 3 সংস্করণ 3 ইউআইডি-র মতো কাজ করে।
  • ওয়েব পরিষেবা
    উদাহরণস্বরূপ, ইউআইডি জেনারেটর সংস্করণ 1 এবং 3 এর পাশাপাশি শূন্য মান এবং জিইউডি তৈরি করে

3
আপনার উত্তর নিয়ে আমার কিছু সমস্যা রয়েছে: প্রথমত, এটি ইতিমধ্যে ভুল হিসাবে দেখানো হয়েছিল যে আপনি কেবল স্ট্যান্ডার্ড জাভা লাইব্রেরি থেকে ভি 4 পেতে পারেন (ভি 3 এটিও সম্ভব)। দ্বিতীয়ত, আপনি এটিকে শব্দটির মতো করে তুলছেন যা "সুরক্ষার উদ্বেগের কারণে" হ্যান্ড-ওয়েভের পাশাপাশি স্ট্যান্ডার্ড লাইব্রেরির পাশাপাশি জাভাতে কোনও বিকল্প নেই। এবং সর্বশেষে, জাভাতে যখন এটি করার প্রচুর উপায় রয়েছে তখন বাইরের উত্সগুলির উপর নির্ভর করে এটি কেবলমাত্র অদক্ষ (প্রোগ্রামিং- এবং / বা পারফরম্যান্স-ওয়াইজ) শুরু করা (যদি না আপনি অবশ্যই এটির প্রয়োজন হয়, যেমন, যেমন তৈরির অংশ হিসাবে এসকিউএল সার্ভারে রেকর্ড)।
ডেনিস্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.