Erlang Language
iolists
खोज…
परिचय
जबकि एर्लैंग स्ट्रिंग पूर्णांकों की एक सूची है, "आयोलिस्ट" एक सूची है जिसके तत्व या तो पूर्णांक, बायनेरिज़ या अन्य आयोलिस्ट हैं, जैसे ["foo", $b, $a, $r, <<"baz">>]
। वह आईओलिस्ट स्ट्रिंग "foobarbaz"
प्रतिनिधित्व करता है।
जब आप iolist_to_binary/1
साथ एक आईओलिस्ट को बाइनरी में परिवर्तित कर सकते हैं, तो आपको अक्सर इसकी आवश्यकता नहीं होती है, क्योंकि file:write_file/2
रूप में Erlang लाइब्रेरी फ़ंक्शंस file:write_file/2
और gen_tcp:send/2
स्वीकार करते हैं, साथ ही स्ट्रिंग्स और बायनेरिज़।
वाक्य - विन्यास
- -Type iolist () :: हो सकता है__प्रोपर_लिस्ट (बाइट () | बाइनरी () | आयोलिस्ट) (, बाइनरी () | []])।
टिप्पणियों
एक आइओलिस्ट क्या है?
यह कोई भी द्विआधारी है। या 0 और 255 के बीच पूर्णांकों वाली कोई भी सूची। या किसी भी मनमाने ढंग से नेस्टेड सूची जिसमें उन दोनों चीजों में से कोई भी हो।
जब तार या बायनेरिज़ को कॉपी करने से बचने के लिए IO डेटा का प्रतिनिधित्व करने के लिए पूर्णांक और बायनेरिज़ की गहरी नेस्टेड सूचियों का उपयोग करें।
बड़ी मात्रा में डेटा के संयोजन के दौरान भी वे कुशल हैं। उदाहरण के लिए द्विआधारी सिंटैक्स का उपयोग करते हुए दो पचास किलोबाइट बायनेरिज़ का संयोजन <<B1/binary, B2/binary>>
आमतौर पर दोनों को एक नए 100 केबी बाइनरी में वास्तविक रूप से वास्तविक बनाने की आवश्यकता होगी। IO सूचियों का उपयोग करना [B1, B2]
केवल सूची को आवंटित करता है, इस मामले में तीन शब्द। एक सूची प्रति तत्व एक शब्द और दूसरे शब्द का उपयोग करती है, अधिक जानकारी के लिए यहां देखें।
++
संचालक के उपयोग से एक नई दो तत्व सूची के बजाय एक पूरी नई सूची बनाई जाएगी। सूची लंबी होने पर तत्वों को जोड़ने के लिए सूची को फिर से बनाना महंगा हो सकता है।
ऐसे मामलों में जहां द्विआधारी डेटा छोटा होता है, आईओ सूचियों को आवंटित करना बायनेरिज़ को जोड़ने से अधिक हो सकता है। यदि बाइनरी डेटा या तो छोटा या बड़ा हो सकता है तो IO सूचियों की सुसंगत लागत को स्वीकार करना अक्सर बेहतर होता है।
ध्यान दें कि अपीलीय बायनेरिज़ को यहाँ वर्णित के अनुसार अनुकूलित किया गया है । संक्षेप में, एक बाइनरी में अतिरिक्त, छिपी हुई जगह आवंटित हो सकती है। यह तब भरा जाएगा जब एक और बाइनरी को इसमें जोड़ा जाएगा जो मुक्त स्थान में फिट बैठता है। इसका मतलब यह है कि हर बाइनरी अपेंडिक्स दोनों बायनेरिज़ की पूरी कॉपी का कारण नहीं होगा।
IO सूचियों का उपयोग आम तौर पर एक फ़ाइल या नेटवर्क सॉकेट जैसे पोर्ट के आउटपुट के निर्माण के लिए किया जाता है।
file:write_file("myfile.txt", ["Hi " [<<"there">>], $\n]).
IO सूची के सामने अनुमत डेटा प्रकार जोड़ें, एक नया निर्माण।
["Guten Tag " | [<<"Hello">>]].
[<<"Guten Tag ">> | [<<"Hello">>]].
[$G, $u, $t, $e, $n , $T, $a, $g | [<<"Hello">>]].
[71,117,116,101,110,84,97,103,<<"Hello">>].
IO डेटा कुशलता से एक सूची के अंत में जोड़ा जा सकता है।
Data_1 = [<<"Hello">>].
Data_2 = [Data_1,<<" Guten Tag ">>].
अनुचित सूचियों से सावधान रहें
["Guten tag " | <<"Hello">>].
खोल में यह ["Guten tag "|<<"Hello">>]
रूप में ["Guten tag "|<<"Hello">>]
रूप में मुद्रित किया जाएगा ["Guten tag "|<<"Hello">>]
["Guten tag ",<<"Hello">>]
। यदि सही पर अंतिम तत्व सूची नहीं है, तो पाइप ऑपरेटर एक अनुचित सूची बनाएगा। हालांकि एक अनुचित सूची जिसकी "पूंछ" अभी भी एक द्विआधारी है, एक वैध आईओलिस्ट है, अनुचित सूचियां मुद्दों का कारण बन सकती हैं क्योंकि कई पुनरावर्ती कार्य एक खाली सूची अंतिम तत्व होने की उम्मीद करते हैं, और इस मामले में एक बाइनरी के रूप में नहीं।
IO सूची आकार प्राप्त करें
Data = ["Guten tag ",<<"Hello">>],
Len = iolist_size(Data),
[<<Len:32>> | Data].
एक आईओलिस्ट के आकार की गणना iolist_size/1
का उपयोग करके की जा सकती है। यह स्निपेट एक संदेश के आकार की गणना करता है और चार बाइट बाइनरी के रूप में सामने की ओर बनाता और बनाता है। यह मैसेजिंग प्रोटोकॉल में एक विशिष्ट ऑपरेशन है।
IO सूची को बाइनरी में परिवर्तित किया जा सकता है
<<"Guten tag, Hello">> = iolist_to_binary(["Guten tag, ",<<"Hello">>]).
एक IO सूची को iolist_to_binary/1
फ़ंक्शन का उपयोग करके एक बाइनरी में परिवर्तित किया जा सकता है। यदि डेटा को लंबी अवधि के लिए संग्रहीत किया जा रहा है या अन्य प्रक्रियाओं के लिए एक संदेश के रूप में भेजा जा रहा है, तो इसे बाइनरी में बदलने के लिए समझ में आ सकता है। किसी एकल प्रक्रिया के कचरा संग्रह में या दूसरों को संदेश भेजने के लिए बाइनरी में परिवर्तित करने की लागत कई बार आईओ सूची की नकल करने से सस्ती हो सकती है।