android Base64String में एक ही अक्षर में कितने बाइट हैं? 1, 2 या अधिक



character-encoding heap-memory (1)

हमें शुरू से करना चाहिए...

Base64 64 वर्णों के सेट के आधार पर एक एन्कोडिंग प्रारूप है - प्रत्येक वर्ण 6 बिट डेटा के बराबर है (2 ^ 6 = 64)। इसलिए परिवर्तित करते समय इनपुट की प्रत्येक 8 बिट बिट (8/6) = 1.333333 ... वर्ण

लेकिन चूंकि कंप्यूटर केवल संपूर्ण बाइट्स स्टोर करते हैं, यह कहना आसान है कि इनपुट के प्रत्येक 3 बाइट्स (3 * 8 = 24 बिट्स) के लिए, 4 आधार -64 वर्ण (4 * 6 = 24 बिट्स) का उत्पादन किया जाता है।

अब, आप कहते हैं कि आपके आधार -64 स्ट्रिंग की कुल लंबाई 11 मिलियन वर्ण है। जावा में, तार 16-बिट यूनिकोड स्वरूप में संग्रहीत किए जाते हैं: 1 वर्ण = 2 बाइट्स।

तो कच्चे कैरेक्टर डेटा में सिर्फ 11 मिलियन वर्ण 20 एमबी से अधिक का उपयोग करेंगे। कि, ऑब्जेक्ट्स, वेरिएबल्स और अन्य स्टेटस के साथ संयुक्त रूप से जानकारी संग्रहीत करने का मतलब है कि 26 एमबी आपके द्वारा उपयोग किए जा रहे डेटा की मात्रा के लिए एक उचित मूल्य है।

इसलिए एक सामान्य नियम का उपयोग आप स्मृति उपयोग का अनुमान लगाने के लिए करना चाहते हैं (((इनपुट_डेटा_इन_बाइट * 4/3) * 2) + कुछ एमबी)

मेरे एंड्रॉइड एप्लीकेशन में सर्वर से छवियों को लाने और उन्हें ढेर मेमोरी में कैश करने की आवश्यकता है।

अनुरोध प्राप्त करने पर, सर्वर पहले byte[] को Base64String स्ट्रिंग में Base64String और स्ट्रिंग देता है। और, ImageView में प्रतिपादन के समय, एंड्रॉइड एप्लिकेशन Base64String को byte[] वापस ले जाती है, एक Bitmap बनाता है, और इसे Base64String पर डालता है।

जैसा कि सब कुछ कैश में है, कुछ मौके पर स्मृति से बाहर जाने के लिए आवेदन की संभावना है, और गंभीर रूप से क्रैश करते हैं

स्मृति स्थिति से बचने के लिए, मैंने अपने आवेदन में सुरक्षा क्वांटम (जैसे 5 एमबी) परिभाषित किया है। यदि किसी भी बिंदु पर उपलब्ध स्मृति इस सुरक्षा क्वांटम से नीचे जाती है, तो उपयोगकर्ता को कुछ छवियों को चिह्नित करने की आवश्यकता होगी, क्योंकि उम्मीदवारों को हटा दिया जाएगा। इसके साथ ही, चयनित आइटमों को साफ करने के बाद एप्लिकेशन को अनुमानित स्मृति को जारी किया जाएगा।

प्रयोक्ता छवि से दूर होने के बाद Bitmap को पुनर्नवीनीकरण कर दिया गया है, इसलिए जब तक हम दूर हैं, Bitmap प्रभावी रूप से किसी भी मेमोरी को नहीं रखता है।

किसी विशेष परीक्षण में, मैं 55 छवियों को डाउनलोड करता हूं, और मेरा ढेर 16 MB बढ़कर 42 MB । इसका अर्थ है, 55 छवियों में 26 MB मैं उन सभी को स्पष्ट करने के बाद, ढेर 16 MB वापस सिकुड़ता

लेकिन, जब मैं सभी Base64String की लंबाई का संचयी योग Base64String यह Base64String आता है। और अगर मैं एक चरित्र को 1 byte के रूप में मानता हूं तो 11983840 bytes 11.4 MB बनाता है

समस्या यह है कि, Base64String की लंबाई का संचयी योग केवल मेरे लिए उपलब्ध उपाय है, जो उपयोगकर्ता को यह बताता है कि उनके चयन के द्वारा कितनी मेमोरी जारी की जा सकती है।

मैंने निम्नलिखित प्रश्न भी पढ़ लिया है, जिसका उल्लेख है, मूल डेटा के प्रत्येक 3 Bytes के लिए Base64String 4 Characters

Base64 लंबाई गणना?

सवाल यह है, Base64String में एक अक्षर में कितने बाइट हैं? 1, 2 या अधिक

यदि 1 character 1 byte , और मेरे परीक्षण में ढेर बढ़ता है और 26 एमबी से सिकुड़ता है। फिर Base64String की लंबाई का संचयी योग केवल 11.4 एमबी है ?

अपडेट किया गया

इसका अर्थ 1 Byte प्रति चरित्र है।

यहां डिफ़ॉल्ट वर्णसैट UTF-8 है