জাভাস্ক্রিপ্টে `DataView`

জাভাস্ক্রিপ্টে `DataView`

এই প্রবন্ধটি জাভাস্ক্রিপ্টে DataView ব্যাখ্যা করে।

আমরা বিস্তারিতভাবে DataView এর মৌলিক ব্যবহার এবং এর প্রয়োগের সুনির্দিষ্ট উদাহরণগুলি ব্যাখ্যা করব।

YouTube Video

জাভাস্ক্রিপ্টে DataView

জাভাস্ক্রিপ্টের DataView হল একটি সুবিধাজনক API যা একটি বাফার (ArrayBuffer) এ সংরক্ষিত ডেটাকে বিভিন্ন ফরম্যাটে পরিচালনা করার জন্য ব্যবহৃত হয়। এটি বাইনারি ডেটার নমনীয় এবং দক্ষ পাঠ ও লেখার অনুমতি দেয় এবং নেটওয়ার্ক যোগাযোগ, ফাইল প্রক্রিয়াকরণ এবং WebAssembly এর সাথে ইন্টারফেস করার ক্ষেত্রে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে।

DataView কী?

DataView একটি ArrayBuffer অবজেক্টের উপর একটি ভিউ স্তর প্রদান করে, যা আপনাকে যেকোনো বাইট অফসেট থেকে বিভিন্ন ডেটা টাইপ (যেমন পূর্ণসংখ্যা, ভাসমান-বিন্দু সংখ্যা এবং অক্ষর) পড়া এবং লেখা করতে দেয়। DataView TypedArray-এর মতো, তবে এটি এন্ডিয়াননেস নির্দিষ্ট করার এবং বাইট স্তরে বিশদ কার্যক্রম সম্পাদনের ক্ষমতা দ্বারা চিহ্নিত।

DataView-এর মৌলিক সিনট্যাক্স

1let buffer = new ArrayBuffer(16);  // Create a 16-byte ArrayBuffer
2let view = new DataView(buffer);    // Manipulate the buffer with a DataView

DataView-এর একটি কন্সট্রাক্টর রয়েছে যা একটি ArrayBuffer-কে আর্গুমেন্ট হিসাবে নেয়। এই উদাহরণে, একটি 16-বাইট বাফার তৈরি করা হয়েছে এবং সেই বাফারে অ্যাক্সেস করতে DataView ব্যবহার করা হয়েছে। DataView ব্যবহার করে, আপনি একটি বাফারে সংরক্ষিত ডেটা পড়ার বা লেখার সময় বিভিন্ন বাইট সাইজ এবং এন্ডিয়াননেস (বিগ-এন্ডিয়ান বা লিটল-এন্ডিয়ান) নির্ধারণ করতে পারেন।

DataView-এর মৌলিক মেথডসমূহ

DataView বিভিন্ন ডেটা টাইপে মান পড়া এবং লেখার জন্য মেথড সরবরাহ করে। এগুলি মূলত ডেটা পড়ার জন্য get মেথড এবং লেখার জন্য set মেথডে বিভক্ত।

প্রধান মেথডগুলো নিচে দেখানো হয়েছে।

মান পড়ার জন্য মেথডসমূহ

  • getInt8(byteOffset): নির্দিষ্ট অফসেটে 1-বাইট সাইনড পূর্ণসংখ্যা পড়ে।
  • getUint8(byteOffset): নির্দিষ্ট অফসেটে 1-বাইট আনসাইনড পূর্ণসংখ্যা পড়ে।
  • getInt16(byteOffset, littleEndian): 2-বাইটের সাইনড পূর্ণসংখ্যা পড়ে।
  • getUint16(byteOffset, littleEndian): 2-বাইটের আনসাইনড পূর্ণসংখ্যা পড়ে।
  • getInt32(byteOffset, littleEndian): 4-বাইটের সাইনড পূর্ণসংখ্যা পড়ে।
  • getUint32(byteOffset, littleEndian): 4-বাইটের আনসাইনড পূর্ণসংখ্যা পড়ে।
  • getFloat32(byteOffset, littleEndian): একটি ৪-বাইট IEEE 754 ফ্লোটিং-পয়েন্ট সংখ্যা পড়ে।
  • getFloat64(byteOffset, littleEndian): একটি ৮-বাইট IEEE 754 ফ্লোটিং-পয়েন্ট সংখ্যা পড়ে।

মান লেখার পদ্ধতি

  • setInt8(byteOffset, value): একটি ১-বাইট স্বাক্ষরিত পূর্ণসংখ্যা লিখে।
  • setUint8(byteOffset, value): একটি ১-বাইট অস্বাক্ষরিত পূর্ণসংখ্যা লিখে।
  • setInt16(byteOffset, value, littleEndian): একটি ২-বাইট স্বাক্ষরিত পূর্ণসংখ্যা লিখে।
  • setUint16(byteOffset, value, littleEndian): একটি ২-বাইট অস্বাক্ষরিত পূর্ণসংখ্যা লিখে।
  • setInt32(byteOffset, value, littleEndian): একটি ৪-বাইট স্বাক্ষরিত পূর্ণসংখ্যা লিখে।
  • setUint32(byteOffset, value, littleEndian): একটি ৪-বাইট অস্বাক্ষরিত পূর্ণসংখ্যা লিখে।
  • setFloat32(byteOffset, value, littleEndian): একটি ৪-বাইট IEEE 754 ফ্লোটিং-পয়েন্ট সংখ্যা লিখে।
  • setFloat64(byteOffset, value, littleEndian): একটি ৮-বাইট IEEE 754 ফ্লোটিং-পয়েন্ট সংখ্যা লিখে।

এই পদ্ধতিগুলি ব্যবহার করে, আপনি একটি ArrayBuffer এ সংরক্ষিত ডেটা সহজে পড়তে এবং লিখতে পারেন।

DataView ব্যবহার করার উদাহরণ

চলুন দেখি কীভাবে DataView ব্যবহার করে বাইনারি ডেটা ম্যানিপুলেট করা যায় তার একটি উদাহরণ।

উদাহরণ ১: একটি ১৬-বিট পূর্ণসংখ্যা লেখা এবং পড়া

1let buffer = new ArrayBuffer(4);  // Create a 4-byte buffer
2let view = new DataView(buffer);
3
4// Write a 2-byte integer value in little-endian format
5view.setInt16(0, 32767, true);  // byteOffset: 0, value: 32767, littleEndian: true
6
7// Read the data in little-endian format
8let value = view.getInt16(0, true);
9console.log(value);  // Output: 32767
  • এই উদাহরণে, setInt16 পদ্ধতি ব্যবহার করে লিটল-এন্ডিয়ান ফরম্যাটে একটি ১৬-বিট স্বাক্ষরিত পূর্ণসংখ্যা লেখা হয় এবং getInt16 পদ্ধতি এটি লিটল-এন্ডিয়ানে পড়ে।

উদাহরণ ২: একটি ফ্লোটিং পয়েন্ট সংখ্যা লেখা এবং পড়া

1let buffer = new ArrayBuffer(8);  // Create an 8-byte buffer
2let view = new DataView(buffer);
3
4// Write an 8-byte floating-point number
5view.setFloat64(0, 3.14159, false);  // byteOffset: 0, value: 3.14159, bigEndian: false
6
7// Read the data in big-endian format
8let pi = view.getFloat64(0, false);
9console.log(pi);  // Output: 3.14159
  • এই উদাহরণে, setFloat64 পদ্ধতি ব্যবহার করে বিগ-এন্ডিয়ান ফরম্যাটে একটি ৬৪-বিট ফ্লোটিং-পয়েন্ট সংখ্যা লেখা হয় এবং getFloat64 দিয়ে ওই মানটি পড়া হয়।

এন্ডিয়াননেস সম্পর্কে

DataView ব্যবহার করে কিভাবে উভয় বিগ-এন্ডিয়ান এবং লিটল-এন্ডিয়ান ফরম্যাটে মান পড়া ও লেখা যায় তার একটি উদাহরণ দেখা যাক।

 1// Example: Handling Endianness with DataView in TypeScript
 2// Create an ArrayBuffer of 4 bytes
 3const buffer = new ArrayBuffer(4);
 4const view = new DataView(buffer);
 5
 6// Store the same number (0x12345678) in both endian formats
 7// By default, DataView uses big-endian
 8view.setUint32(0, 0x12345678); // Big-endian
 9console.log("Big-endian (default):");
10console.log(buffer);
11
12// Overwrite the buffer with little-endian
13view.setUint32(0, 0x12345678, true); // Little-endian
14console.log("Little-endian:");
15console.log(buffer);
16
17// Read values back in both endian modes
18const bigEndianValue = view.getUint32(0); // Big-endian read
19const littleEndianValue = view.getUint32(0, true); // Little-endian read
20
21console.log("Read as Big-endian:", bigEndianValue.toString(16));
22console.log("Read as Little-endian:", littleEndianValue.toString(16));

DataView পদ্ধতিগুলিতে, ডেটা ডিফল্টরূপে বিগ-এন্ডিয়ানে (বাইট ক্রম সর্বাধিক গুরুত্বপূর্ণ থেকে সর্বনিম্ন গুরুত্বপূর্ণ বাইটে) সংরক্ষিত থাকে, তবে লিটল-এন্ডিয়ান ঐচ্ছিকভাবে নির্দিষ্ট করা যেতে পারে। লিটল-এন্ডিয়ান বাইটের ক্রম উল্টে দেয় (সর্বনিম্ন গুরুত্বপূর্ণ থেকে সর্বাধিক গুরুত্বপূর্ণ বাইটে)। ডাটা এন্ডিয়াননেস সঠিকভাবে পরিচালনা করা গুরুত্বপূর্ণ, কারণ বিভিন্ন সিস্টেম এবং নেটওয়ার্ক প্রোটোকল বিভিন্ন এন্ডিয়াননেস ব্যবহার করে।

TypedArray থেকে পার্থক্য

DataView এবং TypedArray-এর মধ্যে পার্থক্যগুলো দেখা যাক।

 1// Example: TypedArray vs DataView
 2
 3// Create a 8-byte buffer
 4const buffer = new ArrayBuffer(8);
 5
 6// --- Using TypedArray (Int32Array) ---
 7const int32View = new Int32Array(buffer);
 8int32View[0] = 42;
 9int32View[1] = 100;
10
11console.log("TypedArray (Int32Array):");
12console.log(int32View); // Int32Array [42, 100]
13
14// --- Using DataView ---
15const dataView = new DataView(buffer);
16
17// Write different types of data at arbitrary byte offsets
18dataView.setInt8(0, 65);         // 1 byte
19dataView.setUint16(1, 500, true); // 2 bytes, little-endian
20dataView.setFloat32(3, 3.14, true); // 4 bytes, little-endian
21
22console.log("\nDataView:");
23console.log("Int8 at 0:", dataView.getInt8(0));      // 65
24console.log("Uint16 at 1:", dataView.getUint16(1, true)); // 500
25console.log("Float32 at 3:", dataView.getFloat32(3, true)); // 3.14
26
27/*
28Output:
29TypedArray (Int32Array):
30Int32Array [42, 100]
31
32DataView:
33Int8 at 0: 65
34Uint16 at 1: 500
35Float32 at 3: 3.140000104904175
36*/

TypedArrayArrayBuffer ভিত্তিক বাফার অপারেশন প্রদান করে, কিন্তু TypedArray ধারাবাহিক ডেটার জন্য যেখানে প্রতিটি ডেটা টাইপের একটি নির্দিষ্ট দৈর্ঘ্য এবং ফরম্যাট থাকে তার জন্য উপযুক্ত। অন্যদিকে, DataView বিভিন্ন ডেটা টাইপের উপর নমনীয়ভাবে কাজ করতে পারে এবং এন্ডিয়াননেস নিয়ন্ত্রণের সুযোগও দেয়। তাই, DataView জটিল বাইনারি ডেটা বিশ্লেষণ এবং নির্মাণের জন্য উপযুক্ত।

সারসংক্ষেপ

DataView জাভাস্ক্রিপ্টে বাইনারি ডেটা পরিচালনার জন্য একটি শক্তিশালী API। আপনি ArrayBuffer-এ সরাসরি অ্যাক্সেস করতে পারেন ডেটা পড়া এবং লেখার জন্য, যেখানে পূর্ণসংখ্যা, ভাসমান-বিন্দু সংখ্যাগুলির পাশাপাশি endianness এর পার্থক্যগুলিও বিবেচনা করা হয়। এটি নেটওয়ার্ক যোগাযোগ এবং ফাইল ফরম্যাট পার্স করার মতো পরিস্থিতিতে উপকারী এবং যখন বাইট-লেভেল নিয়ন্ত্রণ প্রয়োজন হয়, তখন এটি অপরিহার্য। এটি TypedArray-এর সাথে একত্রে ব্যবহার করলে আপনি আরও দক্ষতার সাথে বাইনারি ডেটা ম্যানিপুলেশন করতে পারবেন।

আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।

YouTube Video