2015-04-28 7 views
5

मैं कुछ बाधित वातावरण के लिए अपना स्वयं का BASE64 एन्कोडर/डिकोडर लिख रहा हूं।क्यों जेडीके 8 का बेस 64 आईएसओ -885 9 -1 का उपयोग करता है?

और मैंने पाया कि Base64.Encoder#encodeString कह रहा है कि यह उन एन्कोडेड बाइट्स से स्ट्रिंग बनाने के लिए ISO-8859-1 का उपयोग करता है।

मैं पूरी तरह से मानता हूं कि ISO-8859-1 वर्णसेट में सभी बेस 64 वर्णमाला भी शामिल हैं।

क्या US-ASCII का उपयोग न करने का कोई संभावित कारण है?

उत्तर

7

मुझे लगता है यह और अधिक कुशल है: ISO-8859-1 वापस पाठ करने से परिवर्तित एक char के लिए सीधे प्रत्येक byte को बढ़ावा देने की बात है सिर्फ, जबकि ASCII के लिए आप यह देखना होगा कि byte मान्य ASCII है आवश्यकता होगी । बेस 64 के लिए परिणाम हमेशा वही होगा।

(यह केवल एक अनुमान है, लेकिन एक शिक्षित नहीं। तुम हमेशा मानक चला सकते हैं यदि आप इसे प्रमाणित करने के लिए चाहते हैं ...)

+1

कोड आप सही साबित होता है। [कार्यान्वयन] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/util/Base64.java#Base64.Encoder.encodeToString%28byte%5B % 5 डी% 2 9) सीधे ['स्ट्रिंग (बाइट [] एएससीआई, इंट हिबिटे, इंट ऑफसेट, इंट गिनती) को प्रतिनिधि करता है '] (http://docs.oracle.com/javase/8/docs/api/java/lang /String.html#String-byte:A-int-int-int-), एक कन्स्ट्रक्टर जिसे बहिष्कृत किया गया है क्योंकि यह केवल 'hibyte == 0' (पढ़ने के लिए iso-latin-1) उपयोग के लिए उपयोगी है, जिसके लिए है एक अनुकूलित प्रतिलिपि लूप। तो यह इस विशिष्ट मामले में एक उचित और अनुकूलित उपयोग है। – Holger

+1

हालांकि यह भी काम करेगा यदि * दस्तावेज़ीकरण * ने कहा कि यह उसी कार्यान्वयन का उपयोग करते समय यूएस-एएससीआईआई का उपयोग कर रहा था। लेकिन दस्तावेज़ीकरण में "आईएसओ -885 9 -1" कहने से संभावित कार्यान्वयनकर्ताओं के लिए एक अच्छा सूचक है, यह संकेत देते हुए कि आईएसओआई-लैटिन -1 का उपयोग करके ASCII का उपयोग करने पर प्राथमिकता दी जाती है ... – Holger

+1

@ होल्गर: और यह किसी के लिए बहुत भ्रमित होता * कार्यान्वयन और दस्तावेज़ों में एक साथ :) –

संबंधित मुद्दे