Friday 3 November 2017

Nodejs बफर बाइनरी विकल्प


कोई निर्भरता, मध्यम गति, नोड का कोई भी संस्करण मार्टिन थॉमन्स का जवाब नहीं। जो ओ (एन) समय में चलता है (गैर-अनुकूलन के बारे में उनके उत्तर पर टिप्पणी के मेरे उत्तर भी देखें। डेटाव्यू का उपयोग करना धीमा है। यहां तक ​​कि अगर आपको बाइट्स फ्लिप करने की ज़रूरत है, तो ऐसा करने के लिए तेज़ तरीके हैं।) बफ़र Uint8Arrays हैं, इसलिए आपको अपने ArrayBuffer । यह ओ (1) है: स्लाइस और ऑफ़सेट सामान की आवश्यकता है क्योंकि छोटे बफ़र्स (lt4096 बाइट्स, मुझे लगता है) साझा किए गए अर्रेबफर पर विचार कर रहे हैं इसके बिना आप किसी अन्य टाइप किए गए अर्रे से डेटा वाले एरेबफर के साथ समाप्त हो सकते हैं। आप किसी भी दिशा में जाने के लिए npmjspackagememcpy का उपयोग कर सकते हैं (बफर को एरेबफर और वापस) अन्य उत्तरों की तुलना में इसका तेज यहां पोस्ट किया गया है और एक अच्छी तरह से लिखित पुस्तकालय है। नोड 0.12 से iojs 3.x के लिए आवश्यक ngossens फोर्क (यह देखें)। जुलाई 13 15 को 22: 04 नोड. जेएस में बफर का उपयोग करना परिचय शुद्ध जावास्क्रिप्ट सीधे बाइनरी डेटा को अच्छी तरह से संभाल नहीं करता है, हालांकि जावास्क्रिप्ट यूनिकोड के अनुकूल है। जब टीसीपी धाराओं के साथ काम करते हैं और फाइल सिस्टम को पढ़ने और लिखते हैं, तो डेटा के विशुद्ध बायनरी धाराओं से निपटने के लिए आवश्यक है। नोड में कई हेर-फेर करने, बनाने और उपभोग करने के लिए कई रणनीतियां हैं (एक ऑक्टेट का इस्तेमाल 0 से 255 तक के दशमलव मानों का प्रतिनिधित्व करने के लिए किया जा सकता है।) धाराएं कच्चे डेटा को बफर वर्ग के उदाहरणों में संग्रहीत किया जाता है (जो कि कच्चे बाइनरी डेटा को संभालने के लिए डिज़ाइन किया गया है) नोड में। ध्यान दें। एक ऑक्टेट कंप्यूटिंग और दूरसंचार में डिजिटल सूचनाओं की एक इकाई है जिसमें आठ बिट्स शामिल हैं। शब्द का उपयोग अक्सर जब शब्द बाइट अस्पष्ट हो सकता है, क्योंकि ऐतिहासिक रूप से बाइट के आकार के लिए कोई मानक परिभाषा नहीं थी। एक बफ़र एक भौतिक मेमोरी भंडारण का क्षेत्र है जो अस्थायी रूप से डेटा को संग्रहीत करने के लिए उपयोग किया जाता है जबकि इसे एक जगह से दूसरे स्थान पर ले जाया जाता है नोड में, प्रत्येक बफर वी 8 के बाहर आवंटित कुछ कच्चे स्मृति से मेल खाता है। एक बफर पूर्णांक की एक सरणी की तरह कार्य करता है, लेकिन उसका आकार बदल नहीं सकता। बफर वर्ग वैश्विक है यह सीधे द्विआधारी डेटा के साथ काम करता है और विभिन्न तरीकों से बनाया जा सकता है। एन्कोडिंग सूची, नोड के साथ प्रयोग बफ़र्स और जावास्क्रिप्ट स्ट्रिंग ऑब्जेक्ट के बीच परिवर्तित करने के लिए एक स्पष्ट एन्कोडिंग विधि की आवश्यकता होती है। निम्न तालिका विभिन्न स्ट्रिंग एन्कोडिंग दिखाती है। प्रतिलाभ की मात्रा। ओकटेट की संख्या लिखी गई यदि बफ़र में पूरी स्ट्रिंग फिट करने के लिए पर्याप्त स्थान नहीं है, तो यह स्ट्रिंग का एक हिस्सा लिख ​​देगा। आकार 15 octtets के एक बफर बनाते हैं। अब इसे एक स्ट्रिंग लिखिए: ऊपर दिए गए उदाहरण में, बफ़र को लिखने वाला पहला तर्क बफर को लिखने के लिए स्ट्रिंग (quotNode. jsquot) है, और दूसरा तर्क स्ट्रिंग एन्कोडिंग (quotutf8quot) है। इस मामले में, दूसरा तर्क अनिवार्य नहीं है क्योंकि quotutf8quot डिफ़ॉल्ट एन्कोडिंग है str1.write 7 वापस आ गया है, यानी हमने बफर के सात बाइट्स लिखे हैं। स्ट्रिंग quotNode. jsquot की लंबाई भी सात है। यहाँ एक और उदाहरण है जहां हमने सभी तीन तर्क जोड़ दिए हैं, दूसरा तर्क एक ऑफसेट इंगित करता है। Buffers से पढ़ना buf. toString (एन्कोडिंग, शुरू, अंत) buf. toString (एन्कोडिंग, प्रारंभ, अंत) विधि decodes और बफर डेटा से एक स्ट्रिंग लौटाता है। यहां बफ़ डेटा में बफ़र्स लिखने की विधि के माध्यम से पहले से ही लिखित किया गया है। प्रतिलाभ की मात्रा। तार। निम्नलिखित उदाहरण में हमने आकार 15 ऑक्टेसेट का एक बफर बनाया है, फिर एक स्ट्रिंग Node. js लिखें। पहला toString () विधि पूरे बफर को पढ़ता है और कुछ नल वर्ण (u0000) दिखाता है, क्योंकि बफर में सभी पाठ वर्ण नहीं होते हैं दूसरा व्यक्ति बफर वर्णों को 0 से 7 वें स्थान पर पढ़ता है और नोड। जेज़ देता है। JSON प्रतिनिधित्व buf. toJSON () buf. toJSON () विधि को बफर इंस्टेंस के JSON - प्रतिनिधित्व प्राप्त करने के लिए उपयोग किया जाता है, जो JSON Arrays के लिए आउटपुट के समान है। यहाँ एक उदाहरण है। स्ट्रेटर का बफर आकार 10 था और निर्दिष्ट स्ट्रिंग की लंबाई 7 है, इसलिए, सरणी के भीतर अंतिम तीन मान 0 से दिखाता है। व्यक्तिगत ऑकटेट सेट करना। bufindex bufindex को इंडेक्स पर ओकटेट लाने और सेट करने के लिए उपयोग किया जाता है। मान व्यक्तिगत बाइट्स का उल्लेख करते हैं, कानूनी सीमा 0x00 और 0xFF हेक्स या 0 और 255 के बीच है। निम्नलिखित उदाहरण में, हमने बफर के भीतर Node. js स्ट्रिंग के अंत में तीन वर्ण डाली हैं। ध्यान दें। यहां चारकोडाएट () विधि का विवरण देखें। टेस्ट यदि कोई ऑब्जेक्ट एक बफर है - बफ़र. आईएसबीफर (ओबीजे) बफर. इसबफर (ओबीजे) विधि का उपयोग यह पता लगाने के लिए किया जाता है कि क्या नोड। जेएस बफ़र में एक वस्तु है या नहीं प्रतिलाभ की मात्रा। अगर वस्तु एक बफर या अन्यथा झूठी है, तो सही लौटें। महत्व का प्रकार। बूलियन। निम्न उदाहरण देखें: एक स्ट्रिंग की वास्तविक बाइट लंबाई। बफर. बाइटेलेम्बाइन (स्ट्रिंग, एन्कोडिंग) बफर. बाइटलेबैग (स्ट्रिंग, एन्कोडिंग) पद्धति का उपयोग किसी एन्कोडिंग के साथ स्ट्रिंग की वास्तविक बाइट लंबाई प्राप्त करने के लिए किया जाता है। प्रतिलाभ की मात्रा। बफर यदि सूची में कोई आइटम नहीं हैं, या यदि कुल लंबाई लंबाई 0 है, तो यह शून्य-बफर बफर देता है। अगर सूची में एक वस्तु है, तो सूची का पहला आइटम वापस आ गया है। यदि सूची में एक से अधिक आइटम हैं, तो एक नया बफ़र बनाया गया है। अगर कुल लंबाई प्रदान नहीं की गई है, तो इसे सूची में बफ़र्स से पढ़ा जाता है। हालांकि, यह फ़ंक्शन के लिए एक अतिरिक्त लूप जोड़ता है, इसलिए यह स्पष्ट रूप से लंबाई प्रदान करने के लिए तेज़ है। निम्नलिखित उदाहरण देखें बफर 1 की लंबाई 4 है और बफर 2 है। पिछले उदाहरण में हमने बफ़र्स की कुल लंबाई (5) का उल्लेख किया है इसलिए यह नोडज नोडजे नहीं दिखाता है बफर में बफ़र की लंबाई - buf. length buf. length विधि का इस्तेमाल बफर के आकार को प्राप्त करने के लिए किया जाता है और यह दर्शाता है कि कितनी मेमोरी आवंटित की गई है। यह बफ़र्स सामग्री के आकार के समान नहीं है, क्योंकि बफर एक तिहाई से भरा हो सकता है उदाहरण के लिए: बफ़र कॉपी buf. copy (targetBuffer, targetStart, sourceStart, sourceEnd) buf. copy (targetBuffer, targetStart, sourceStart, sourceEnd) विधि का उपयोग एक बफर की सामग्री को दूसरे पर कॉपी करने के लिए किया जाता है। Node. js लिखने योग्य स्ट्रीम के साथ डेटा को संग्रहीत करना यह ट्यूटोरियल समझाएगा कैसे Node. js लिखने योग्य धाराओं के साथ डेटा को स्टोर करने और अपने खुद के कस्टम लेखन योग्य स्ट्रीम बनाने के तरीके संस्करण सूचना लेखक: जेफ बारसेज़वेस्की प्रकाशित: 18 अगस्त, 2018 टैग: नोडज, स्ट्रीम स्तर: इंटरमीडिएट पूर्वापेक्षाएँ: बफ़र्स, इवेंट, एनपीएम मॉड्यूल स्थापित करें Node. js v0.10 (इस लेखन के रूप में नवीनतम स्थिर है v0.10.16), लेकिन नदियों आमतौर पर अपने शुरुआती दिनों से नोड। जेएस का एक हिस्सा रहा है Streams2 Writable सार क्लास का प्रयोग नोड के पुराने संस्करणों (पूर्व v0.10) के साथ एनपीएम मॉड्यूल पठनीय-स्ट्रीम (v1.0.15 के साथ परीक्षण) का उपयोग करके किया जा सकता है। धाराओं पाठ फ़ाइल लेखन सरल उदाहरण बस यूफ़्फ़ 8 पाठ लिखित में है, क्योंकि डिफ़ॉल्ट एन्कोडिंग के बाद यदि आप स्ट्रिंग्स लिखते हैं तो utf8 है। यदि आप एक अलग एन्कोडिंग के साथ तार लिखना चाहते हैं तो आप केवल createWriteStream लाइन को बदल सकते हैं या प्रत्येक लिखने के लिए एन्कोडिंग जोड़ सकते हैं। द्विआधारी फ़ाइल लेखन एक द्विपदीय फ़ाइल लेखन सिर्फ लिखने के लिए स्ट्रिंग्स के बजाय बफ़र का उपयोग करने का मामला है। ऊपर दिए गए उदाहरण में, मैं क्रिप्टो.क्रेतेरैंडबैइट्स () का उपयोग बफर डेटा बनाने के लिए करता हूं, लेकिन आप बाइनरी डेटा का उपयोग कर सकते हैं जो आप आसानी से आसानी से किसी दूसरे स्रोत से बना या पढ़ सकते हैं। फाइल को लिखा गया है जब जानने के लिए इनपुट और आउटपुट Node. js में एसिंक्रोनस ऑपरेशंस हैं, तो क्या होगा अगर हम यह जानना चाहते हैं कि कोई फ़ाइल पूरी तरह से लिखी गई है तो इसका उत्तर श्रोताओं को घटनाओं को सेटअप करने के लिए है, जो स्ट्रीम का उत्सर्जन करता है फिनिश इवेंट (नोड. जेएस v0.10 में जोड़ा गया) इंगित करता है कि सभी डेटा को अंतर्निहित सिस्टम में फ्लाई किया गया है। V0.10 से पहले नोड. जेएस पर, आप जब उस प्लावित के संकेत प्राप्त करने के लिए. end () में एक सीबी जोड़ सकते हैं, फिर भी किसी भी अन्य परिवर्तनों को डाउनस्ट्रीम खाते में लेते हैं और इस तरह कस्टम नोड। जेएस लिखने योग्य धाराओं का निर्माण करना जब आपको डाटाबेस या अन्य भंडारण सुविधा में डेटा स्टोर करने के लिए अपना खुद का कस्टम लिखने योग्य स्ट्रीम बनाने की आवश्यकता होती है, तो यह आसान है यदि आप नोड। जेएस 0.10 में उपलब्ध नई स्ट्रीम 2 राइटलेटबल वर्ग का उपयोग करें या एनपीएम पॉलीफिल मॉड्यूल पठनीय-स्ट्रीम एक लिखने योग्य स्ट्रीम बनाने के लिए जो सामान्य Node. js स्ट्रीम व्यवहार को लागू करता है, आपको केवल लेखन योग्य उप-वर्ग और लेखन (चक, एन्कोडिंग, सीबी) को लागू करना है। लिखने योग्य मेमोरी स्ट्रीम बनाना यहां एक उदाहरण है, जो एक सरल इन-मेमरी डेटास्टोर को लिख रहा है। हम कुंजी के रूप में स्ट्रीम के निर्माण पर दिए गए नाम का उपयोग कर रहे हैं, और हम समाप्त होने तक डेटा को जोड़ते हैं। लिखित धाराएं सुरुचिपूर्ण और सरल हैं, लिखित पाठ या द्विआधारी डेटा को नोड। जेएस धाराओं में प्रयोग करना सरल है, और यहां तक ​​कि पूरी तरह से कार्यात्मक कस्टम लिखने योग्य धाराओं का निर्माण भी नोड। जेएस v0.10 (या में शुरू की गई नई स्ट्रीम 2 कार्यक्षमता के साथ पार्क में चलना है पॉलीफिल पठनीय-धारा मॉड्यूल का उपयोग कर) अतिरिक्त पठन के लिए इस पेज को साझा करेंउप बफर शुद्ध जावास्क्रिप्ट, जबकि यूनिकोड-एन्कोडेड स्ट्रिंग्स के साथ महान, सीधे बाइनरी डेटा को बहुत अच्छी तरह से संभाल नहीं करता है। यह ब्राउज़र पर ठीक है, जहां अधिकांश डेटा स्ट्रिंग के रूप में होता है। हालांकि, नोड. जेएस सर्वर को भी टीसीपी धाराओं से निपटना होगा और फाइल सिस्टम को पढ़ना और लिखना होगा, जो दोनों ही विशुद्ध रूप से बाइनरी स्ट्रीम डेटा से निपटने के लिए आवश्यक हैं। इस समस्या को संभालने का एक तरीका सिर्फ तारों का उपयोग वैसे ही करना है। जो वास्तव में नोड। जेएस ने पहले किया था। हालांकि, यह दृष्टिकोण इसकी धीमी गति से काम करने के लिए बेहद समस्याग्रस्त है, जिससे आप एआरआई के लिए तैयार एपीआई के साथ काम करते हैं और बाइनरी डेटा नहीं करते हैं, और अजीब और रहस्यमय तरीके से तोड़ने की प्रवृत्ति है। द्विआधारी तार का उपयोग न करें इसके बजाय बफ़र का उपयोग करें बफ़र बफ़र्स क्या हैं, बफर वर्ग के नोड में हैं, जो कि कच्चे बाइनरी डेटा को संभाल करने के लिए डिज़ाइन किया गया है। प्रत्येक बफर वी 8 के बाहर आवंटित कुछ कच्ची स्मृति से मेल खाती है। बफर कुछ हद तक पूर्णांक के सरणियों की तरह कार्य करते हैं, लेकिन पुन: आकार योग्य नहीं होते हैं और विशेष रूप से बाइनरी डेटा के लिए तरीकों का एक पूरा समूह है। इसके अलावा, बफर में पूर्णांक प्रत्येक एक बाइट का प्रतिनिधित्व करता है और इसलिए 0 से 255 (28 - 1) के मूल्यों तक सीमित हैं, समावेशी। जहां आप बफर देखते हैं: जंगली में, बफ़र्स आम तौर पर धाराओं से आने वाले बाइनरी डेटा के संदर्भ में दिखाई देते हैं, जैसे कि fs. createReadStream। बफ़र्स बनाना: नए बफ़र्स बनाने के कुछ तरीके हैं: यह बफर अनिर्धारित है और इसमें 8 बाइट्स शामिल हैं। यह बफ़र को इस सरणी की सामग्री को आरंभ करता है। ध्यान रखें कि सरणी की सामग्री बाइट्स का प्रतिनिधित्व करने वाले पूर्णांक है। यह बफर को पहली स्ट्रिंग के द्विआधारी एन्कोडिंग को आरंभ करता है जैसा कि दूसरे तर्क (इस स्थिति में, यूटीएफ -8) द्वारा निर्दिष्ट किया गया है। यूटीएफ -8 नोड के साथ उपयोग किए जाने वाले सबसे आम एनकोडिंग है, लेकिन बफर भी इसका समर्थन करता है: ascii यह एन्कोडिंग तेजी से है, लेकिन एस्की वर्ण सेट तक सीमित है। इसके अलावा, यह रिक्त वर्णों को रिक्त स्थान में परिवर्तित कर देगा, यूटीएफ -8 एन्कोडिंग के विपरीत। यूसी 2 एक दो-बाइट, छोटा-एंडियन एन्कोडिंग यूनिकोड के सबसेट को एनकोड कर सकते हैं base64 Base64 स्ट्रिंग एन्कोडिंग बाइनरी यह पहले वर्णित द्विआधारी स्ट्रिंग प्रारूप है, और इसे नापसंद होने की प्रक्रिया में है। इसके उपयोग से बचें बफ़र को लिखना यह देखते हुए कि पहले से ही एक बफर बनाया गया है: हम इसे तार लिखना शुरू कर सकते हैं: बफर का पहला तर्क। लिखने के लिए बफर को लिखने के लिए स्ट्रिंग है, और दूसरा तर्क स्ट्रिंग एन्कोडिंग है यह utf-8 में डिफ़ॉल्ट होता है, इसलिए यह तर्क बाह्य है। बफर। 5 लौटेगा। इसका अर्थ है कि हमने बफर के पांच बाइट्स को लिखा था। तथ्य यह है कि स्ट्रिंग हैलो भी 5 अक्षर लंबा है संयोग है, क्योंकि प्रत्येक अक्षर सिर्फ 8 बिट्स के रूप में हुआ था। यह उपयोगी है यदि आप संदेश को पूरा करना चाहते हैं: बफर कब। लिखने के तीन तर्क हैं, दूसरा तर्क एक ऑफ़सेट, या बफर के सूचक को लिखना शुरू करता है। बफर से पढ़ना: बफ़र्स को पढ़ने का सबसे आम तरीका संभवतः स्टॉथिंग विधि का उपयोग करना है, क्योंकि कई बफ़र्स में टेक्स्ट होते हैं: फिर से, पहला तर्क एन्कोडिंग है। इस मामले में, यह देखा जा सकता है कि पूरे बफर का इस्तेमाल सद्भावना से नहीं किया गया था, क्योंकि हम जानते हैं कि बफ़र को कितने बाइट्स लिखे गए हैं, हम उस टुकड़े को वास्तव में दिलचस्प बनाने के लिए बस अधिक तर्क जोड़ सकते हैं: व्यक्तिगत ऑकटेट: आप सेट भी कर सकते हैं एक सरणी-जैसी सिंटैक्स का उपयोग करके व्यक्तिगत बिट्स: इस उदाहरण में, मैं शेष बाइट्स को हाथ से सेट कर रहा हूं, जैसे कि वे यूटीएफ -8 एन्कोडेड और 1 वर्ण का प्रतिनिधित्व करते हैं। बफर के साथ अधिक मज़ा Buffer. isBuffer (ऑब्जेक्ट) यह विधि यह देखने के लिए जांचती है कि ऑब्जेक्ट बफर है, जैसे Array. isArray। Buffer. byteLength (स्ट्रिंग, एन्कोडिंग) इस फ़ंक्शन के साथ, आप दिए गए एन्कोडिंग के साथ स्ट्रिंग को सांकेतिकृत करने के लिए बाइट्स की संख्या की जांच कर सकते हैं (जो कि यूफ़ -8 के लिए डिफ़ॉल्ट है)। यह लंबाई स्ट्रिंग लंबाई के समान नहीं है, क्योंकि कई अक्षरों को एन्कोड करने के लिए अधिक बाइट्स की आवश्यकता होती है। उदाहरण के लिए: यूनिकोड snowman केवल एक अक्षर है, लेकिन बफर को सांकेतिक शब्दों में बदलना करने के लिए 3 पूरे बाइट्स लेता है। लम्बाई यह आपके बफर की लंबाई है, और यह दर्शाता है कि कितनी मेमोरी आवंटित की गई है। यह बफ़र्स सामग्री के आकार के समान नहीं है, क्योंकि बफर आधे से भरा हुआ हो सकता है उदाहरण के लिए: इस उदाहरण में, बफर में लिखी गई सामग्रियों में केवल तीन समूह होते हैं (चूंकि वे सिंगल-वर्ण स्नोमैन का प्रतिनिधित्व करते हैं), लेकिन बफ़र्स लंबाई अभी भी 16 है, क्योंकि यह आरंभ किया गया था। बफरकॉपी (लक्ष्य, लक्ष्यस्टार्ट0, सोर्सस्टार्ट, स्रोतएन्डबफर। लैंप) बफर। एक को एक बफर की सामग्री को दूसरे पर कॉपी करने की अनुमति देता है। पहला तर्क लक्ष्य बफर है जिस पर बफर की सामग्री की प्रतिलिपि बनाना है। और बाकी तर्क केवल लक्ष्य बफर के बीच में कहीं और स्रोत बफर के उप-भाग की प्रतिलिपि बनाने की अनुमति देते हैं। उदाहरण के लिए: इस उदाहरण में, मैंने स्नोमैन बफर की प्रतिलिपि बनाई, जिसमें एक 3 बाइट लम्बी चरित्र होता है, फ्रॉस्ट बफ़र को, जिस पर मैंने पहले 16 बाइट्स को लिखा था। क्योंकि स्नोमैन का चरित्र 3 बाइट्स लंबा है, परिणामस्वरूप बफर के 1 9 बाइट्स को ले जाता है। बफर. slice (प्रारंभ, एंडबफ़ेर. लैंघ) यह पद्धति एपीआई आम तौर पर सरणी के समान है। प्रोटोटाइप। टुकड़ा। लेकिन एक बहुत आयात अंतर के साथ: टुकड़ा एक नया बफर नहीं है और केवल मेमोरी स्पेस का एक सबसेट संदर्भ देता है टुकड़ा को संशोधित करने से मूल बफर को भी संशोधित किया जाएगा। उदाहरण के लिए: अब फ्रोस्टी को अंडरस्कोर्स के पोखर में बदल दिया गया है। ओह।

No comments:

Post a Comment