यदि किसी सर्वर को बेस 64 स्ट्रिंग प्राप्त होती है और कनवर्ट करने से पहले इसकी लंबाई जांचना चाहती है, तो कहें कि यह हमेशा अंतिम बाइट सरणी 16KB होने की अनुमति देना चाहता था। एक बेस 64 स्ट्रिंग में परिवर्तित होने पर 16KB बाइट सरणी संभवतः कितनी बड़ी हो सकती है (प्रति चरित्र एक बाइट मानते हैं)?बेस 64: अंतरिक्ष उपयोग में सबसे खराब संभव वृद्धि क्या है?
उत्तर
बेस 64 तीन बाइट्स के प्रत्येक सेट को चार बाइट्स में एन्कोड करता है। इसके अलावा उत्पादन हमेशा चार में से एक होने के लिए गद्देदार है।
इसका मतलब है कि आकार n की श्रृंखला का आधार -64 प्रतिनिधित्व के आकार है: प्लस्तर लगाना
ceil(n/3) * 4
तो, एक 16kb सरणी के लिए, आधार -64 प्रतिनिधित्व किया जाएगा (16 * 1024/3) * 4 = 21848 बाइट लंबा ~ = 21.8kb।
ए किसी न किसी अनुमान लगाया जाएगा कि डेटा का आकार मूल के 4/3 तक बढ़ा दिया गया है।
16kb 131,072 बिट्स है। बेस 64 24-बिट बफर को चार 6-बिट अक्षरों में पैक करता है, इसलिए आपके पास 5,462 * 4 = 21,848 बाइट होंगे।
नोट
कि n बाइट्स की एक इनपुट दिया, व्यवहृत किया जा सकेगा (n + 2 - ((n + 2)% 3))/3 * 4 बाइट्स लंबे, इसलिए प्रति इनपुट बाइट आउटपुट बाइट्स की संख्या बड़े एन के लिए 4/3 या 1.33333 तक पहुंच जाती है।
तो 16kb * 4/3 21.3 'केबी, या 21848 बाइट्स से बहुत कम देता है, सटीक होने के लिए।
आशा इस
में मदद करता है के बाद से सवाल सबसे खराब संभव वृद्धि के बारे में था, मैं वहां आम तौर पर प्रत्येक 80 अक्षर के आसपास में पंक्ति विराम हैं कि जोड़ना होगा। इसका अर्थ यह है कि यदि आप बेस 64 एन्कोडेड डेटा को विंडोज़ पर एक टेक्स्ट फ़ाइल में सहेज रहे हैं तो यह प्रत्येक लाइन के लिए लिनक्स 1 बाइट पर 2 बाइट जोड़ देगा।
वास्तविक एन्कोडिंग से वृद्धि ऊपर वर्णित है।
चरम मामला नहीं है कि 1 स्रोत बाइट 4 बेस 64 बाइट बन जाता है, इसलिए 4x वृद्धि होती है? किसी भी स्रोत स्रोत को तब तक बेहतर अनुपात मिल जाता है, जैसा कि अन्य ने कहा है, यह असम्बद्ध रूप से 1.333 तक पहुंचता है ... – Olie
यदि एन टाइप की गई भाषा में एक पूर्णांक है, तो यह थोड़ा तेज़ होगा <--> फ्लोट कास्ट करता है और '((एन + 2)/3) * 4' –
की गणना करता है क्या हमें 2 को जोड़ने की आवश्यकता है लंबाई या नहीं? – vIceBerg
@vIceBerg, यह इस बात पर निर्भर करता है कि आप 'फ्लोट' संख्याओं के साथ 'छत' का उपयोग कर रहे हैं या केवल 'int' संख्याएं हैं। (और कोई 'ceil') –