बाइनरी बनाम ASCII फ़ाइल का आकार


17

मुझे गणना से कुछ डेटा लिखने की आवश्यकता है, जिसे बाद में Parview (.vtu या vtk फ़ाइल) द्वारा पढ़ा जाएगा।

जब फ़ाइल आकार की बात आती है, तो क्या मुझे ASCII प्रारूप या बाइनरी प्रारूप के लिए जाना चाहिए?

जवाबों:


20

यदि आपकी एकमात्र चिंता फ़ाइल आकार है, तो आप बाइनरी फ़ाइलें चाहते हैं। एक उदाहरण के लिए, मान लें कि आप किसी फ़ाइल में 1 डबल सटीक फ़्लोटिंग पॉइंट संख्या लिख ​​रहे हैं। मान लेते हैं कि फ़ाइल सिस्टम इसे पूरी तरह से संभाल सकता है और फ़ाइल को पकड़कर, हेडर और पैडिंग सभी 0 कर सकता है।

एक बाइनरी फ़ाइल के लिए, वह संख्या रैम, या 8 बाइट्स में संख्या का सटीक आकार लेगी।

ASCII प्रारूप में, यह होगा:

  • आधार के 16 अंक
  • दशमलव के लिए 1 अवधि
  • 1 चार योजक को परिसीमन करने के लिए
  • प्रतिपादक के संकेत के लिए 1 चार
  • घातांक के लिए 2-3 चार

यह मानते हुए कि एक वर्ण के लिए केवल 1 बाइट का उपयोग होता है, वही संख्या रखने के लिए 22 बाइट्स है। यह संख्याओं (आमतौर पर कम से कम 1) के बीच परिसीमन करने के लिए आवश्यक वर्णों की गणना नहीं करता है। इसलिए ASCII प्रारूप के लिए फ़ाइल का आकार लगभग 3 गुना बड़ा होगा।

आप संग्रहीत फ़ाइलों में शुद्धता के लिए फ़ाइल आकार में व्यापार कर सकते हैं (केवल आधार में 5-6 अंक रखें), लेकिन यह इस बात पर निर्भर करता है कि आप उनके लिए क्या उपयोग कर रहे हैं। ASCII का मुख्य लाभ डिबगिंग या मानव पठनीय डेटा के उत्पादन के लिए है।


3
वैज्ञानिक क्षेत्र में भी महत्वपूर्ण दीर्घकालिक अभिलेखीय और विश्वसनीय साझाकरण है, यही वजह है कि अक्षमताओं के बावजूद, ASCII CSV इतना प्रचलित और अनुशंसित (PDF) है
भयावह

2
एक अन्य उपयोगी बात यह है कि हालांकि ASCII CSV एन्कोडिंग बहुत ही कुशल नहीं है, अपने ascii फ़ाइल पर फ़ाइल संपीड़न उपयोगिता (जैसे ज़िप, gzip, आदि) का उपयोग करते हुए आमतौर पर फ़ाइल का आकार बाइनरी फ़ाइल के आकार के समान कुछ नीचे लाएगा। ।
ब्रायन बॉर्चर्स

3
सावधान रहें क्योंकि कुछ इनपुट / आउटपुट लाइब्रेरियों के लिए बिट रिपर्टुबिलिटी के लिए बिट प्राप्त करने के लिए पर्याप्त सावधानी नहीं है क्योंकि आप ASCII में IEEE डबल प्रिसिजन संख्याएँ आउटपुट करते हैं और फिर उन्हें वापस पढ़ते हैं। मेरे अनुभव में, 17 या 18 दशमलव अंकों का उपयोग करना कभी-कभी सुरक्षा के लिए आवश्यक होता है। ।
ब्रायन बोरचर्स

5
हॉर्लर की टिप्पणी के बारे में: मुझे यकीन है कि अच्छी तरह से उपयोग किया जाता है, मानकीकृत खुले द्विआधारी प्रारूप जैसे कि एचडीएफ 5 लंबे समय तक रहेगा। यही मैं व्यक्तिगत रूप से सुझाऊंगा।
एलेक्स

1
मैं सटीकता, कॉम्पैक्टनेस, मन की शांति और (विशेष रूप से) गति के लिए, जब भी संभव हो, बाइनरी से चिपकता हूं। फिर अगर मुझे और अधिक कॉम्पैक्टनेस की आवश्यकता होती है, तो मैं इसे ज़िप कर सकता हूं। यदि मुझे सामग्री को नेत्रहीन रूप से पढ़ने में सक्षम होने की आवश्यकता है, तो मैं उसके लिए थोड़ा कार्यक्रम लिख सकता हूं। दूसरी ओर, अगर दृश्य होना अधिक महत्वपूर्ण है, और आसानी से एक्सेल, आर, आदि जैसे यादृच्छिक कार्यक्रमों के लिए पारित किया जाता है, तो सीएसवी जाने का रास्ता है।
माइक डनलैवी

15

व्यवहार में, आपको शायद ही कभी विज़ुअलाइज़ेशन फ़ाइलों में डेटा की आवश्यकता होती है, जो कि 3 मान्य अंकों से अधिक सटीक है। उस मामले में, ASCII है - शायद आश्चर्यजनक रूप से - अक्सर द्विआधारी रूप से अधिक कॉम्पैक्ट। यदि आप संग्रह करने के बारे में सोच रहे हैं, तो इन ASCII फाइलों को bzip-ing करना संभवत: आपके द्वारा प्राप्त की जाने वाली सबसे छोटी फाइलों की उपज देने वाला है।

उस ने कहा, पैराव्यू VTU प्रारूप को पढ़ता है जिसमें एक संपीड़ित द्विआधारी रूप है (XML- आधारित, लेकिन डेटा पहले libz- संपीड़ित है और फिर ASCII पाठ प्राप्त करने के लिए फिर से uuencoded है)। विशिष्ट फ़ाइलों पर, यह 4-10 के एक कारक को बचाता है। बड़ी फ़ाइलों के लिए, यह निश्चित रूप से जाने का रास्ता है।


2
मैंने अन्य उत्तर के विपरीत इसके लिए मतदान किया। मेरे पास किसी भी तरह से एक मजबूत राय नहीं है, लेकिन यहां होने के लिए एक अच्छा बिंदु है।
बिल बर्थ

वैकल्पिक रूप से, कम बिट्स को स्पष्ट रूप से शून्य करें और बाइनरी को संपीड़ित करें।
जेड ब्राउन

वाह, यह काफी कुछ fiddling की आवश्यकता होगी। या ऐसे कार्य हैं जो ऐसा करते हैं? (तैरने और वापस डबल करने के लिए कास्टिंग के अलावा।)
वोल्फगैंग बैंगर्थ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.