2015-12-18 9 views
6

में लिखते समय प्रकारों का आकार ASCII (StreamWriter) में प्रत्येक वर्ण का आकार 1 बाइट लेता है चाहे वह संख्या या चरित्र हो।बाइनरीवाइटर

इसी प्रकार प्रत्येक चरित्र का आकार, बाइनरी में पूर्णांक क्या होगा? (BinaryWriter)। क्या कोई संक्षेप में समझा सकता है?

+0

'sizeof (char) == 2', इसलिए एकल वर्ण * 2 बाइट * लंबा है; हालांकि, 'स्ट्रीम' का आकार एन्कोडिंग (एएससीआई, यूटीएफ -8 इत्यादि) और पात्रों पर निर्भर करता है:' aaa' (3 अंग्रेज़ी अक्षरों 'ए') 'ааа' (3 * रूसी * अक्षरों' से कम हो सकता है ' –

+0

सी # में एक 'char' यूटीएफ -16 है, इसका मतलब है कि प्रत्येक चरित्र 2 बाइट लेता है। एक अंतराल प्रकार इसके आकार पर निर्भर करता है, जिसका अर्थ है कि यह या तो एक बाइट ('बाइट'), 'शॉर्ट' (16 बिट),' int' (32 बिट), 'लम्बी' (64 बिट) हो सकता है। –

+1

हर बार जब मैं किसी को 'बाइनरीवाइटर' का उपयोग करता हूं, तो वे लगभग बुरी तरह से विचार किए जाने के कारण इसका उपयोग करते हैं। यह क्या है कि आपको यहां करने की ज़रूरत है? एक बाइनरी serializer बेहतर विकल्प होगा? (से चुनने के लिए कई हैं) –

उत्तर

1

चलिए StreamWriter और BinaryWriter के बीच अंतर के साथ शुरू करते हैं। StreamWriter एक स्ट्रीम में एक पाठपरक प्रतिनिधित्व लिखने के लिए है। StreamWriter किसी भी स्ट्रिंग में लिखा गया है (लिखें * विधि के माध्यम से) को परिवर्तित करता है, फिर एन्कोडिंग के माध्यम से बाइट्स में परिवर्तित होता है, और अंतर्निहित धारा में बाइट लिखता है।

BinaryWriter एक स्ट्रीम में कच्चे "आदिम" डेटा प्रकार लिखने के लिए है। संख्यात्मक प्रकारों के लिए यह स्मृति प्रतिनिधित्व में लेता है, क्या कुछ प्रतिनिधित्व को सामान्य करने के लिए काम करते हैं (उदाहरण के लिए अंतहीनता में अंतर को संभालने के लिए), और फिर अंतर्निहित धारा में बाइट लिखते हैं। ध्यान दें कि इसमें कन्स्ट्रक्टर में एक एन्कोडिंग भी उपलब्ध है। इसका उपयोग केवल char और string को बाइट्स में परिवर्तित करने के लिए किया जाता है। डिफ़ॉल्ट एन्कोडिंग यूटीएफ 8 है।

ASCII (StreamWriter) में प्रत्येक वर्ण का आकार 1 बाइट लेता है चाहे वह संख्या या चरित्र हो।

यह कथन मुझे कुछ हद तक भ्रमित कर रहा है। मुझे स्पष्टीकरण दें। int 1 स्ट्रिंग "1" में परिवर्तित हो जाएगा जो एएससीआईआई में 49 के रूप में एन्कोड करता है जो वास्तव में एक बाइट है, लेकिन 100 स्ट्रिंग "10000" में परिवर्तित हो जाएगा जो ASCII में 49 48 48 48 48 में एन्कोड करता है, इसलिए यह 5 बाइट्स है । यदि BinaryWriter का उपयोग करते हुए दोनों 4 बाइट्स (int का आकार) पर कब्जा करेंगे।

इसी तरह प्रत्येक चरित्र का आकार, बाइनरी में पूर्णांक क्या होगा? (BinaryWriter)। क्या कोई संक्षेप में समझा सकता है?

एक char के आकार BinaryWriter और StreamWriter दोनों के लिए प्रयुक्त एन्कोडिंग पर निर्भर करता है। संख्यात्मक प्रकारों का आकार int, long, double क्रमशः अंतर्निहित प्रकार, 4, 8, और 8 बाइट्स के आकार हैं। लिखित डेटा की मात्रा बाइनरीवाइटर के प्रत्येक Write overload में प्रलेखित की गई है। स्ट्रिंग्स को char[] से बाइनरीवाइटर में स्पष्ट रूप से इलाज किया जाता है और एन्कोडेड बाइट्स लिखे जाने से पहले उनकी लंबाई पूर्ववर्ती होगी।