জাভা আর্কাইভ (JAR) ফাইল ফরম্যাট হল একটি প্ল্যাটফর্ম-নির্ভরশীল ফাইল ফরম্যাট যা একাধিক ফাইলকে একটি একক ফাইলে সংযুক্ত এবং সংকুচিত করার জন্য ব্যবহৃত হয়। এটি ZIP ফাইল ফরম্যাটের উপর নির্মিত এবং জাভা ক্লাস এবং সংশ্লিষ্ট মেটাডেটা এবং রিসোর্স বিতরণের জন্য ব্যবহৃত হয়। JAR ফাইলগুলি জাভা প্ল্যাটফর্মের একটি মৌলিক বিল্ডিং ব্লক হিসাবে কাজ করে, যা ডেভেলপারদের জাভা অ্যাপ্লিকেশন এবং লাইব্রেরিগুলিকে একটি মানকীকৃত এবং দক্ষ পদ্ধতিতে প্যাকেজ এবং ডেপ্লয় করতে সক্ষম করে।
একটি JAR ফাইল ক্লাস ফাইল, রিসোর্স ফাইল এবং মেটাডেটার একটি সংগ্রহ নিয়ে গঠিত। ক্লাস ফাইলগুলিতে কম্পাইল করা জাভা বাইটকোড থাকে যা একটি জাভা ভার্চুয়াল মেশিন (JVM) দ্বারা এক্সিকিউট করা যেতে পারে। রিসোর্স ফাইলগুলিতে বিভিন্ন ধরনের ডেটা অন্তর্ভুক্ত থাকতে পারে, যেমন ইমেজ, কনফিগারেশন ফাইল বা জাভা অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় অন্যান্য অ্যাসেট। মেটাডেটা JAR ফাইলের বিষয়বস্তু সম্পর্কে তথ্য সরবরাহ করে এবং সেগুলি কীভাবে প্রক্রিয়া করা উচিত তা বলে।
একটি JAR ফাইলের কাঠামো একটি নির্দিষ্ট লেআউট অনুসরণ করে। রুট স্তরে, একটি META-INF ডিরেক্টরি রয়েছে যাতে মেটাডেটা ফাইল থাকে। এই ডিরেক্টরির সবচেয়ে গুরুত্বপূর্ণ ফাইলটি হল MANIFEST.MF ফাইল, যা একটি প্লেইন টেক্সট ফাইল যা JAR ফাইলের বিষয়বস্তু সম্পর্কে তথ্য সরবরাহ করে। ম্যানিফেস্ট ফাইল বিভিন্ন অ্যাট্রিবিউট নির্দিষ্ট করতে পারে, যেমন অ্যাপ্লিকেশনের মূল ক্লাস, ক্লাসপাথ নির্ভরতা, সংস্করণের তথ্য এবং সুরক্ষা সেটিংস।
META-INF ডিরেক্টরির পাশাপাশি, এক টি JAR ফাইলে একটি বা একাধিক সাবডিরেক্টরি থাকতে পারে যা ক্লাস ফাইল এবং রিসোর্স ফাইলগুলিকে সংগঠিত করে। সাবডিরেক্টরি কাঠামো সাধারণত JAR ফাইলের মধ্যে থাকা জাভা ক্লাসের প্যাকেজ হায়ারার্কির প্রতিফলন করে। উদাহরণস্বরূপ, যদি একটি ক্লাস com.example.myapp প্যাকেজের অন্তর্গত হয়, তাহলে এটি JAR ফাইলে com/example/myapp/ পাথের অধীনে সংরক্ষণ করা হবে।
JAR ফরম্যাটের একটি প্রধান সুবিধা হল এটি যে ফাইলগুলি ধারণ করে সেগুলি সংকুচিত করার ক্ষমতা। ডিফল্টভাবে, JAR ফাইলগুলি আর্কাইভের আকার কমাতে ZIP সংকোচন অ্যালগরিদম ব্যবহার করে। এই সংকোচন কেবল স্টোরেজ স্পেস সংরক্ষণ করে না, এটি একটি নেটওয়ার্কের উপর JAR ফাইল প্রেরণের জন্য প্রয়োজনীয় সময়ও হ্রাস করে। তবে, এটি লক্ষ্য করা গুরুত্বপূর্ণ যে সংকোচনটি JAR আর্কাইভের মধ্যে থাকা পৃথক ফাইলগুলিতে প্রয়োগ করা হয়, পুরো আর্কাইভে নয়।
JAR ফাইলগুলি বিভিন্ন সরঞ্জাম এবং লাইব্রেরি ব্যবহার করে তৈরি এ বং পরিচালনা করা যেতে পারে। জাভা ডেভেলপমেন্ট কিট (JDK) jar কমান্ড-লাইন সরঞ্জাম সরবরাহ করে, যা ডেভেলপারদের JAR ফাইল তৈরি, আপডেট এবং এক্সট্র্যাক্ট করতে দেয়। jar সরঞ্জামটি JAR ফাইলের বিষয়বস্তু নির্দিষ্ট করার, ম্যানিফেস্ট অ্যাট্রিবিউট সেট করার এবং ডিজিটাল স্বাক্ষর পরিচালনার জন্য বিভিন্ন বিকল্পকে সমর্থন করে।
কমান্ড-লাইন সরঞ্জামের পাশাপাশি, ডেভেলপাররা JAR ফাইলগুলি প্রোগ্রাম্যাটিকভাবে তৈরি এবং পরিচালনা করতে জাভা API গুলিও ব্যবহার করতে পারেন। java.util.jar প্যাকেজ JarFile, JarEntry এবং JarOutputStream এর মতো ক্লাস সরবরাহ করে, যা ডেভেলপারদের প্রোগ্রাম্যাটিকভাবে JAR ফাইল পড়তে এবং লিখতে সক্ষম করে। এই API গুলি JAR ফাইলের বিষয়বস্তু এবং মেটাডেটার উপর সূক্ষ্ম-দানা নিয়ন্ত্রণের অনুমতি দেয়।
JAR ফাইলগুলি জাভা অ্যাপ্লিকেশনগুলির ডেপ্লয়মেন্ট এবং বিতরণে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। এগুলি সমস্ত প্রয়োজনীয় ক্লাস ফাইল, রিসোর্স এবং নির্ভরতাগুলিকে একটি একক ফাইলে প্যাকেজ করার একটি সুবিধাজনক উপায় সরবরাহ করে যা সহজেই বিতরণ করা যায় এবং জাভা সমর্থন করে এমন যেকোনো প্ল্যাটফর্মে এক্সিকিউট করা যায়। JAR ফাইলগুলি লাইব্রেরি, ফ্রেমওয়ার্ক এবং স্ট্যান্ডঅ্যালোন অ্যাপ্লিকেশন বিতরণ করতে ব্যবহার করা যেতে পারে।
JAR ফাইলগুলির জন্য একটি সাধারণ ব্যবহারের ক্ষেত্রে এক্সিকিউটেবল JAR ফাইল তৈরি করা, যা "ফ্যাট" বা "উবার" JAR নামেও পরিচিত। একটি এক্সিকিউটেবল JAR ফাইলে সমস্ত প্রয়োজনীয় নির্ভরতা থাকে এবং এটি সরাসরি জাভা রানটাইম পরিবেশ দ্বারা চালানো যেতে পারে। একটি এক্সিকিউটেবল JAR তৈরি করতে, ম্যানিফেস্ট ফাইলটি অ্যাপ্লিকেশনের এন্ট্রি পয়েন্ট হিসাবে কাজ করে এমন মূল ক্লাসটি নির্দিষ্ট করতে হবে। যখন JAR ফাইলটি এক্সিকিউট করা হয়, তখন JVM স্বয়ংক্রিয়ভাবে নির্দিষ্ট মূল ক্লাসটি লঞ্চ করে।
JAR ফাইলগুলি ডিজিটাল সাইনিংকেও সমর্থন ক রে, যা JAR ফাইলের অখণ্ডতা এবং সত্যতা যাচাই করার অনুমতি দেয়। ডিজিটাল স্বাক্ষর নিশ্চিত করে যে JAR ফাইলের বিষয়বস্তুতে হস্তক্ষেপ করা হয়নি এবং JAR ফাইলটি একটি বিশ্বস্ত উৎস থেকে এসেছে
ফাইল কম্প্রেশন অপ্রয়োজনীয় ডেটা কমিয়ে দেয় যাতে একই তথ্য কম বিট ব্যবহার করে। আপনি কতদূর যেতে পারবেন তার উপরের সীমা তথ্য তত্ত্ব দ্বারা নিয়ন্ত্রিত হয়: ক্ষতিহীন কম্প্রেশনের জন্য, সীমা হলো উৎসের এনট্রপি (শ্যানন-এর সোর্স কোডিং থিওরেম এবং তার আসল ১৯৪৮ সালের পেপার “যোগাযোগের একটি গাণিতিক তত্ত্ব”দেখুন)। ক্ষতিযুক্ত কম্প্রেশনের জন্য, হার এবং মানের মধ্যে ট্রেড-অফ রেট-ডিসটরশন তত্ত্ব দ্বারা ক্যাপচার করা হয়।
বেশিরভাগ কম্প্রেসারের দুটি পর্যায় থাকে। প্রথমত, একটি মডেল ডেটাতে কাঠামো ভবিষ্যদ্বাণী করে বা প্রকাশ করে। দ্বিতীয়ত, একটি কোডার সেই ভবিষ্যদ্বাণীগুলিকে প্রায়-সর্বোত্তম বিট প্যাটার্নে পরিণত করে। একটি ক্লাসিক মডেলিং পরিবার হলো লেম্পেল-জিভ: LZ77 (১৯৭৭) এবং LZ78 (১৯৭৮) পুনরাবৃত্ত সাবস্ট্রিং শনাক্ত করে এবং কাঁচা বাইটের পরিবর্তে রেফারেন্স নির্গত করে। কোডিং দিকে, হাফম্যান কোডিং (আসল পেপারটি দেখুন ১৯৫২) বেশি সম্ভাব্য প্রতীকগুলির জন্য ছোট কোড বরাদ্দ করে। অ্যারিথমেটিক কোডিং এবং রেঞ্জ কোডিং হলো সূক্ষ্ম-দানাদার বিকল্প যা এনট্রপি সীমার কাছাকাছি চেপে ধরে, যেখানে আধুনিক অ্যাসিমেট্রিক নিউমেরাল সিস্টেম (ANS) দ্রুত টেবিল-চালিত বাস্তবায়নের মাধ্যমে অনুরূপ কম্প্রেশন অর্জন করে।
DEFLATE (gzip, zlib, এবং ZIP দ্বারা ব্যবহৃত) LZ77-কে হাফম্যান কোডিংয়ের সাথে একত্রিত করে। এর স্পেসিফিকেশনগুলি সর্বজনীন: DEFLATE RFC 1951, zlib র্যাপার RFC 1950, এবং gzip ফাইল ফরম্যাট RFC 1952. Gzip স্ট্রিমিংয়ের জন্য ফ্রেম করা হয়েছে এবং স্পষ্টভাবে র্যান্ডম অ্যাক্সেসের চেষ্টা করে না. PNG ছবিগুলি DEFLATE-কে তাদের একমাত্র কম্প্রেশন পদ্ধতি হিসাবে মানসম্মত করে (সর্বোচ্চ ৩২ KiB উইন্ডো সহ), PNG স্পেসি ফিকেশন অনুযায়ী “কম্প্রেশন পদ্ধতি ০… ডিলেট/ইনফ্লেট… সর্বাধিক ৩২,৭৬৮ বাইট” এবং W3C/ISO PNG ২য় সংস্করণ.
Zstandard (zstd): একটি নতুন সাধারণ-উদ্দেশ্য কম্প্রেসার যা খুব দ্রুত ডিকম্প্রেশনের সাথে উচ্চ অনুপাতের জন্য ডিজাইন করা হয়েছে। ফরম্যাটটি RFC 8878 (এছাড়াও HTML মিরর) এবং রেফারেন্স স্পেসিফিকেশন GitHub-এ-এ নথিভুক্ত করা হয়েছে। Gzip-এর মতো, বেসিক ফ্রেম র্যান্ডম অ্যাক্সেসের লক্ষ্য রাখে না. zstd-এর অন্যতম সুপার পাওয়ার হলো অভিধান: আপনার কর্পাস থেকে ছোট নমুনা যা অনেক ছোট বা অনুরূপ ফাইলের উপর কম্প্রেশনকে নাটকীয়ভাবে উন্নত করে (দেখুন python-zstandard অভিধান ডক্স এবং নাইজেল টাও-এর কাজ করা উদাহরণ)। বাস্তবায়নগুলি “অসংগঠিত” এবং “সংগঠিত” উভয় অভিধানই গ্রহণ করে (আলোচনা).
Brotli: ওয়েব সামগ্রীর জন্য অপ্টিমাইজ করা (যেমন, WOFF2 ফন্ট, HTTP)। এটি একটি স্ট্যাটিক অভিধানের সাথে একটি DEFLATE-এর মতো LZ+এনট্রপি কোর মিশ্রিত করে। স্পেসিফিকেশনটি হলো RFC 7932, যা ২WBITS−১৬-এর একটি স্লাইডিং উইন্ডো নোট করে যেখানে WBITS [১০, ২৪]-এর মধ্যে (১ KiB−১৬ B থেকে ১৬ MiB−১৬ B পর্যন্ত) এবং এটি র্যান্ডম অ্যাক্সেসের চেষ্টা করে না. Brotli প্রায়শই ওয়েব টেক্সটে gzip-কে পরাজিত করে এবং দ্রুত ডিকোড করে।
ZIP কন্টেইনার: ZIP একটি ফাইল আর্কাইভ যা বিভিন্ন কম্প্রেশন পদ্ধতি (deflate, store, zstd, ইত্যাদি) সহ এন্ট্রি সংরক্ষণ করতে পারে। ডি ফ্যাক্টো স্ট্যান্ডার্ড হলো PKWARE-এর APPNOTE (দেখুন APPNOTE পোর্টাল, একটি হোস্ট করা কপি, এবং LC ওভারভিউ ZIP ফাইল ফরম্যাট (PKWARE) / ZIP 6.3.3)।
LZ4 কাঁচা গতির লক্ষ্য রাখে পরিমিত অনুপাতের সাথে। এর প্রকল্প পৃষ্ঠা (“অত্যন্ত দ্রুত কম্প্রেশন”) এবং ফ্রেম ফরম্যাটদেখুন। এটি ইন-মেমরি ক্যাশে, টেলিমেট্রি, বা হট পাথের জন্য আদর্শ যেখানে ডিকম্প্রেশন প্রায় RAM গতির হতে হবে।
XZ / LZMA ঘনত্বের জন্য চাপ দেয় (দুর্দান্ত অনুপাত) তুলনামূলকভাবে ধীর কম্প্রেশনের সাথে। XZ একটি কন্টেইনার; ভারী উত্তোলন সাধারণত LZMA/LZMA2 (LZ77-এর মতো মডেলিং + রেঞ্জ কোডিং) দ্বারা করা হয়। দেখুন .xz ফাইল ফরম্যাট, LZMA স্পেক (Pavlov), এবং লিনাক্স কার্নেল নোট XZ এমবেডেড-এ. XZ সাধারণত gzip-কে ছাড়িয়ে যায় এবং প্রায়শই উচ্চ-অনুপাতের আধুনিক কোডেকগুলির সাথে প্রতিযোগিতা করে, তবে ধীর এনকোড সময়ের সাথে।
bzip2 Burrows–Wheeler Transform (BWT), মুভ-টু-ফ্রন্ট, RLE, এবং হাফম্যান কোডিং প্রয়োগ করে। এটি সাধারণত gzip-এর চেয়ে ছোট কিন্তু ধীর; দেখুন অফিসিয়াল ম্যানুয়াল এবং ম্যান পেজ (লিনাক্স).
“উইন্ডো সাইজ” গুরুত্বপূর্ণ। DEFLATE রেফারেন্সগুলি কেবল ৩২ KiB পিছনে তাকাতে পারে (RFC 1951 এবং PNG-এর ৩২ KiB ক্যাপ এখানে উল্লেখ করা হয়েছে)। Brotli-এর উইন্ডো প্রায় ১ KiB থেকে ১৬ MiB পর্যন্ত বিস্তৃত (RFC 7932). Zstd স্তর দ্বারা উইন্ডো এবং অনুসন্ধানের গভীরতা টিউন করে (RFC 8878). বেসিক gzip/zstd/brotli স্ট্রিমগুলি অনুক্রমিক ডিকোডিংয়ের জন্য ডিজাইন করা হয়েছে; বেস ফরম্যাটগুলি র্যান্ডম অ্যাক্সেসের প্রতিশ্রুতি দেয় না, যদিও কন্টেইনারগুলি (যেমন, tar ইনডেক্স, চাঙ্কড ফ্রেমিং, বা ফরম্যাট-নির্দিষ্ট ইনডেক্স) এটি স্তর করতে পারে।
উপরের ফরম্যাটগুলি ক্ষতি হীন: আপনি সঠিক বাইটগুলি পুনর্গঠন করতে পারেন। মিডিয়া কোডেকগুলি প্রায়শই ক্ষতিযুক্ত: তারা কম বিটরেট হিট করার জন্য অদৃশ্য বিবরণ বাতিল করে। ছবিতে, ক্লাসিক JPEG (DCT, কোয়ান্টাইজেশন, এনট্রপি কোডিং) ITU-T T.81 / ISO/IEC 10918-1-এ মানসম্মত। অডিওতে, MP3 (MPEG-1 লেয়ার III) এবং AAC (MPEG-2/4) পারসেপচুয়াল মডেল এবং MDCT ট্রান্সফর্মের উপর নির্ভর করে (দেখুন ISO/IEC 11172-3, ISO/IEC 13818-7, এবং একটি MDCT ওভারভিউ এখানে)। ক্ষতিযুক্ত এবং ক্ষতিহীন সহাবস্থান করতে পারে (যেমন, UI সম্পদের জন্য PNG; ছবি/ভিডিও/অডিওর জন্য ওয়েব কোডেক)।
তত্ত্ব: শ্যানন 1948 · রেট-ডিসটরশন · কোডিং: হাফম্যান 1952 · অ্যারিথমেটিক কোডিং · রেঞ্জ কোডিং · ANS. ফরম্যাট: DEFLATE · zlib · gzip · Zstandard · Brotli · LZ4 ফ্রেম · XZ ফরম্যাট. BWT স্ট্যাক: Burrows–Wheeler (1994) · bzip2 ম্যানুয়াল. মিডিয়া: JPEG T.81 · MP3 ISO/IEC 11172-3 · AAC ISO/IEC 13818-7 · MDCT.
শেষ কথা: আপনার ডেটা এবং সীমাবদ্ধতার সাথে মেলে এমন একটি কম্প্রেসার চয়ন করুন, বাস্তব ইনপুটগুলিতে পরিমাপ করুন, এবং অভিধান এবং স্মার্ট ফ্রেমিং থেকে লাভগুলি ভুলে যাবেন না। সঠিক জুটির সাথে, আপনি পেতে পারেন ছোট ফাইল, দ্রুত স্থানান্তর, এবং আরও দ্রুত অ্যাপ — সঠিকতা বা পোর্টেবিলিটি ত্যাগ না করে।
ফাইল কম্প্রেশন হলো একটি প্রক্রিয়া যা একটি বা একাধিক ফাইলের সাইজ কমায়, সাধারণত স্টোরেজ স্পেস বাঁচাতে বা নেটওয়ার্কের মাধ্যমে দ্রুত ডেটা পাঠানোর জন্য।
ফাইল কম্প্রেশন ডেটাতে পুনরাবৃত্তি চিহ্নিত করে এবং অপ্রয়োজনীয় অংশ বাদ দিয়ে কাজ করে। এটি অ্যালগরিদম ব্যবহার করে মূল ডেটা-কে আরও ছোট আকারে এনকোড করে।
ফাইল কম্প ্রেশনের দুটি প্রধান প্রকার হলো লসলেস এবং লসি কম্প্রেশন। লসলেস কম্প্রেশনে মূল ফাইলটি নিখুঁতভাবে পুনরুদ্ধার করা যায়, যেখানে লসি কম্প্রেশনে ডেটার গুণমানে কিছুটা ছাড় দিয়ে ফাইলের আকার আরও উল্লেখযোগ্যভাবে কমানো সম্ভব হয়।
ফাইল কম্প্রেশন সরঞ্জামের একটি জনপ্রিয় উদাহরণ হলো WinZip, যা ZIP এবং RAR সহ একাধিক কম্প্রেশন ফরম্যাট সমর্থন করে।
লসলেস কম্প্রেশনের ক্ষেত্রে ফাইলের মানে কোনো পরিবর্তন হয় না। তবে, লসি কম্প্রেশনে ফাইলের আকার আরও কমাতে কিছু কম-গুরুত্বপূর্ণ ডেটা বাদ দেওয়া হয়, ফলে ফাইলের মানে লক্ষণীয় পরিবর্তন হতে পারে।
হ্যাঁ, ডেটা অখণ্ডতার দিক থেকে ফাইল কম্প্রেশ ন নিরাপদ, বিশেষ করে লসলেস কম্প্রেশনের ক্ষেত্রে। তবে, যেকোনো ফাইলের মতোই, সংকুচিত ফাইলও ম্যালওয়্যার বা ভাইরাসের লক্ষ্য হতে পারে, তাই নির্ভরযোগ্য নিরাপত্তা সফটওয়্যার ব্যবহার করা জরুরি।
প্রায় সব ধরনের ফাইলই কম্প্রেস করা যায়, যেমন টেক্সট ফাইল, ছবি, অডিও, ভিডিও এবং সফটওয়্যার ফাইল। তবে, ফাইলের ধরন অনুযায়ী কম্প্রেশনের মাত্রা ভিন্ন হতে পারে।
ZIP ফাইল হলো একটি আর্কাইভ ফরম্যাট যা এক বা একাধিক ফাইলকে একটিমাত্র ফাইলে সংকুচিত করে রাখে। এটি ফাইল শেয়ার করা সহজ করে এবং স্টোরেজ বাঁচায়।
হ্যাঁ, técnicamente করা যায়, তবে ফাইলের আকার খুব বেশি কমবে না, এমনকি বেড়েও যেতে পারে। কারণ, প্রতিটি কম্প্রেশন প্রক্রিয়ায় কিছু অতিরিক্ত ডেটা (মেটাডেটা) যুক্ত হয়।
একটি ফাইল ডিকম্প্রেস করার জন্য আপনার একটি ডিকম্প্রেশন বা আনজিপিং টুল প্রয়োজন হবে, যেমন WinZip বা 7-Zip। এই টুলগুলো সংকুচিত ফাইল থেকে মূল ফাইলগুলো বের করে আনতে পারে।