जावास्क्रिप्ट में `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)
: 4-बाइट का IEEE 754 फ्लोटिंग-पॉइंट नंबर पढ़ता है।getFloat64(byteOffset, littleEndian)
: 8-बाइट का IEEE 754 फ्लोटिंग-पॉइंट नंबर पढ़ता है।
मान लिखने के लिए विधियाँ
setInt8(byteOffset, value)
: 1-बाइट का साइन किया हुआ पूर्णांक लिखता है।setUint8(byteOffset, value)
: 1-बाइट का बिना साइन वाला पूर्णांक लिखता है।setInt16(byteOffset, value, littleEndian)
: 2-बाइट का साइन किया हुआ पूर्णांक लिखता है।setUint16(byteOffset, value, littleEndian)
: 2-बाइट का बिना साइन वाला पूर्णांक लिखता है।setInt32(byteOffset, value, littleEndian)
: 4-बाइट का साइन किया हुआ पूर्णांक लिखता है।setUint32(byteOffset, value, littleEndian)
: 4-बाइट का बिना साइन वाला पूर्णांक लिखता है।setFloat32(byteOffset, value, littleEndian)
: 4-बाइट का IEEE 754 फ्लोटिंग-पॉइंट नंबर लिखता है।setFloat64(byteOffset, value, littleEndian)
: 8-बाइट का IEEE 754 फ्लोटिंग-पॉइंट नंबर लिखता है।
इन विधियों का उपयोग करके, आप ArrayBuffer
में संग्रहीत डेटा को लचीले तरीके से पढ़ और लिख सकते हैं।
DataView
का उपयोग करने का उदाहरण
आइए DataView
का उपयोग करके बाइनरी डेटा में हेरफेर करने का एक उदाहरण देखें।
उदाहरण 1: 16-बिट पूर्णांक लिखना और पढ़ना
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
विधि का उपयोग करके लिटिल-एंडियन प्रारूप में एक 16-बिट साइन किया हुआ पूर्णांक लिखा जाता है, औरgetInt16
विधि उसी मान को लिटिल-एंडियन में पढ़ती है।
उदाहरण 2: फ्लोटिंग-पॉइंट नंबर लिखना और पढ़ना
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
विधि का उपयोग करके बिग-एंडियन प्रारूप में एक 64-बिट फ्लोटिंग-पॉइंट नंबर लिखा जाता है, और उसी मान को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*/
TypedArray
भी ArrayBuffer
के आधार पर बफर संचालन प्रदान करता है, लेकिन TypedArray
प्रत्येक डेटा प्रकार के लिए एक निश्चित लंबाई और प्रारूप के साथ लगातार डेटा पर संचालन के लिए उपयुक्त है। दूसरी ओर, DataView
विभिन्न डेटा प्रकारों पर लचीले तरीके से संचालन कर सकता है और साथ ही एंडियननेस पर नियंत्रण की अनुमति देता है। इसलिए, DataView
जटिल बाइनरी डेटा को पार्स करने और बनाने के लिए उपयुक्त है।
सारांश
DataView
जावास्क्रिप्ट में बाइनरी डेटा को संभालने के लिए एक शक्तिशाली API है। आप सीधे ArrayBuffer
का उपयोग करके डेटा को पढ़ और लिख सकते हैं, जिसमें पूर्णांक, फ्लोटिंग-पॉइंट नंबर और एंडियननेस के भिन्नताओं का ध्यान रखा जा सकता है। यह नेटवर्क संचार और फ़ाइल स्वरूप पार्सिंग जैसी स्थितियों में उपयोगी है, और जब बाइट-स्तरीय नियंत्रण की आवश्यकता हो, तब यह अनिवार्य है। इसे TypedArray
के साथ मिलाकर उपयोग करने पर आप और अधिक कुशलता से बाइनरी डेटा का प्रबंधन कर सकते हैं।
आप हमारे YouTube चैनल पर Visual Studio Code का उपयोग करके ऊपर दिए गए लेख के साथ आगे बढ़ सकते हैं। कृपया YouTube चैनल को भी देखें।