ज़िगज़ैग को लिखने/पढ़ने के लिए बहुत अधिक ओवरहेड की आवश्यकता है। असल में मैं यह देखने के लिए डर गया था कि यह सिर्फ int/long मानों को लिखता नहीं है, लेकिन बहुत अधिक स्कैम्बलिंग करता है। यहां तक कि एक पाश शामिल है: https://github.com/mardambey/mypipe/blob/master/avro/lang/java/avro/src/main/java/org/apache/avro/io/DirectBinaryEncoder.java#L90प्रोटोकॉल बफर और एवरो में ज़िगज़ैग एन्कोडिंग के पीछे क्या कारण है?
मैं प्रोटोकॉल बफ़र डॉक्स में या एवरो डॉक्स में मिल जाए, या कारण अपने आप करने में सक्षम हो ऐसा नहीं लगता है, ऐसे ही संख्या पांव मार का लाभ क्या है? एन्कोडिंग के बाद सकारात्मक और नकारात्मक संख्याओं को बदलने के लिए बेहतर क्यों है?
क्यों वे केवल छोटे-अंत, बड़े-एंडियन, नेटवर्क ऑर्डर में लिखे गए हैं, जो केवल उन्हें स्मृति में पढ़ने की आवश्यकता होगी और संभवतः थोड़ा अंतहीनता को उलट देगा? हम प्रदर्शन के साथ भुगतान क्या खरीदते हैं?
यदि आप कुछ प्रोटोबफ में रूचि रखते हैं जैसे कि महंगा वैरिंट एन्कोडिंग नहीं करता है, तो https://capnproto.org देखें। यह तेज़ है लेकिन यह तार पर अधिक जगह लेता है। (प्रकटीकरण: मैं कैप प्रोटो के लेखक हूं और Google के अधिकांश ओपन सोर्स प्रोटोबफ कोड के लेखक भी हैं।) –
@ केंटनवर्डा जानकारी के लिए धन्यवाद, मुझे कैपप्रोटो से अवगत नहीं था। मेरे प्रोटोकॉल टूलबल्ट में जोड़ा गया। – Endrju
प्रोटोकॉल बफर, कम से कम संस्करण 2 के रूप में, आप निश्चित आकार एन्कोडेड पूर्णांक (उदा। - निश्चित 32, sfixed64, आदि) का उपयोग करते हैं, यदि यह आपके एप्लिकेशन के लिए अधिक समझ में आता है। उदाहरण के लिए, यदि आपके मान समान रूप से मूल्यों की संभावित सीमा में वितरित किए जाएंगे, तो आप परिवर्तनीय रूप के बजाय निश्चित रूप का उपयोग करना चाहते हैं। ऐसा कहा जा रहा है कि, सामान्य रूप से उपयोग किए गए मानों के लिए शून्य के करीब क्लस्टर करने के लिए यह बहुत आम है जहां इस प्रकार की सरल परिवर्तनीय लंबाई एन्कोडिंग बहुत अधिक जगह बचा सकती है। – jschultz410