1
फ़ाइल बनाएं और नाम दें
2
अपने संपादक को खोलें, जैसे नोटपैड या वीआई, और प्रारंभिक कोड दर्ज करें, जैसे कि कक्षा घोषणा और ज्ञात स्थिरांक Base64.java फ़ाइल को कॉल करें
3
प्रासंगिक आरएफसी में इन स्थिर मूल्यों को निर्दिष्ट किया गया है, जैसा कि लेख में दर्शाया गया है। कोडिंग शुरू करने से पहले सभी प्रासंगिक आरएफसी को पढ़ने के लिए आमतौर पर यह एक अच्छा विचार है
सार्वजनिक वर्ग Base64 {निजी स्थिर अंतिम स्ट्रिंग base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "+ /" - निजी स्थिर अंतिम पूर्णांक = splitLinesAt 76
4
बाइट्स के रूप में वर्णों का इलाज करने का अर्थ है कि जापानी या चीनी जैसे कई बाइट्स वाले अक्षर हार्ड-कोडित नहीं होंगे इसलिए, हमें एन्कोडिंग शुरू होने से पहले यूनिकोड वर्णों को वर्तमान स्थान से बाइट में कनवर्ट करने में सक्षम होने के लिए स्ट्रिंग मिलेबेट्स () विधि का उपयोग करना होगा। लेकिन उदाहरण के लिए, यदि आप किसी अंग्रेज़ी-अमेरिकी स्थान में जापानी दस्तावेज़ पर काम कर रहे हैं, तो आपको getBytes () परिणाम, जैसे कि GetBytes ("UTF-8") का स्थान निर्दिष्ट करना होगा।
5
आइए देखें कि कितने बाइट्स पैडिंग की आवश्यकता है। जावा मॉड्यूल ऑपरेटर,%, यहां उपयोगी है। हम सबस्ट्रैटन नाम और पैरामीटर भी घोषित करेंगे, क्योंकि हम यहाँ हैं।
6
अब हम इनपुट को रिक्त करने के लिए उस मान का उपयोग करते हैं। ध्यान दें कि यदि कोई पैडिंग की आवश्यकता नहीं है, तो कोई पैडिंग जोड़ा नहीं जाएगा, क्योंकि हमने मॉड्यूल 3 को दूसरी बार लिया, 3 को 0 में बदल दिया।
सार्वजनिक स्थिर बाइट [] zeroPad (पूर्णांक लंबाई, बाइट [] बाइट्स) {बाइट [] = नए बाइट गद्देदार [लंबाई] - // JVM System.arraycopy (बाइट्स, 0, गद्देदार, 0, bytes.length) द्वारा शून्य करने के लिए प्रारंभ - padded- एनकोड लौट} सार्वजनिक स्थैतिक स्ट्रिंग (स्ट्रिंग स्ट्रिंग) स्ट्रिंग इनकोडिंग = { "" - बाइट [] = stringArray- {stringArray String.getBytes कोशिश ( "UTF-8") - // उचित कोड स्ट्रिंग का उपयोग करें! } पकड़ने (अपवाद पर ध्यान नहीं दिया) = {stringArray String.getBytes () - // डिफ़ॉल्ट स्थान का उपयोग करने के बजाय paddingCount} = पूर्णांक (3 - (3 stringArray.length%))% 3 = stringArray zeroPad (+ stringArray.length paddingCount, stringArray) -
7
अब जब हम भरने पर पहुंचे हैं: एक बार में 24-बिट पूर्णांक में तीन बाइट्स को सेकंद करें, फिर 6-बिट इंडेक्स को एन्कोडिंग स्ट्रिंग में निकालें। ये संख्या जादू नहीं है: 24 को 6 बार 4 बार विभाजित किया जाता है, और 6 बिट्स 0 से 63 तक मूल्य संग्रहीत कर सकते हैं, जो बेस 64 में एन्कोड किए गए स्ट्रिंग में किसी भी मान को अनुक्रमित किया जा सकता है।
के लिए (int i = 0- i < stringArray.length- i += 3) { int j = ((stringArray[i] & 0xff) << 16) + ((stringArray[i + 1] & 0xff) << 8) + (stringArray[i + 2] & 0xff)- encoded = encoded + base64code.charAt((j >> 18) 0x3f) + base64code.charAt ((जे 12) 0x3f) + base64code.charAt ((जे 6) 0x3f) + base64code.charAt (जे 0x3f) -}
8
अंत में, हम परिणाम को यह स्पष्ट करने के लिए एक अलग उपदंश का उपयोग करते हुए, आवश्यक 76-बाइट सीमाओं में नई लाइनों को सम्मिलित करके इसे भरने के बाद संकलित करते हैं।} सार्वजनिक स्थैतिक स्ट्रिंग स्प्लिट लाइन्स (स्ट्रिंग स्ट्रिंग) {स्ट्रिंग लाइन = "- (इंट (स्ट्रिंग, स्ट्रिंग, स्ट्रिंग, स्ट्रिंग) के लिए मैं = 0- i < string.length()- i += splitLinesAt) {lines += string.substring(i, Math.min(string.length(), i +splitLinesAt))-lines += "rn"-}return lines-}
9
हम चाहते हैं, यदि हम चाहते हैं, तो एक मुख्य परीक्षण दिनचर्या जोड़ सकते हैं। आमतौर पर यह सार्वजनिक खपत के लिए कोड पोस्ट करने से पहले एक अच्छा विचार है।
सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {for (int i = 0- i < args.length- i++) {System.err.println("codificando "" + args[i] + """)-System.out.println(encode(args[i]))-}}
10
यहां पूरा मॉड्यूल है:सार्वजनिक वर्ग Base64 {निजी स्थिर अंतिम स्ट्रिंग base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "+ /" - निजी स्थिर अंतिम पूर्णांक splitLinesAt = 76-सार्वजनिक स्थिर बाइट [] zeroPad (पूर्णांक लंबाई, बाइट [] बाइट्स) {बाइट [] = नए बाइट गद्देदार [लंबाई] - // JVMSystem.arraycopy (बाइट्स, 0, गद्देदार, 0, bytes.length) -return padded- एनकोड से शून्य करने के लिए प्रारंभ} सार्वजनिक स्थैतिक स्ट्रिंग (स्ट्रिंग स्ट्रिंग) स्ट्रिंग {एन्कोडेड = "" बाइट [] stringArray-कोशिश {stringArray String.getBytes = ( "UTF-8") -! // एन्क्रिप्शन स्ट्रिंग का उपयोग उचित} पकड़ (अपवाद पर ध्यान नहीं दिया) = {stringArray String.getBytes () - // बजाय डिफ़ॉल्ट स्थान का उपयोग} // लगाता है कि कितने गद्दी के बाइट्स आप resultadoint को paddingCount = (3 - (stringArray.length% 3)) जोड़ देगा% 3 - // entradastringArray = zeroPad में आवश्यक भरने जोड़ने (stringArray.length + paddingCount, stringArray) - // प्रक्रिया एक समय में 3 बाइट्स, नई पंक्ति आवेषण के बारे में // 4 बाइट परिणाम चिंता बनाने depoisfor (आई इंट = 0- मैं < stringArray.length- i += 3) {int j = ((stringArray[i] & 0xff) << 16) +((stringArray[i + 1] & 0xff) << 8) +(stringArray[i + 2] & 0xff)-encoded = encoded + base64code.charAt((j >> 18) 0x3f) + base64code.charAt ((जे 12) 0x3f) + base64code.charAt ((जे 6) 0x3f) + base64code.charAt (जे 0x3F) -} अशक्त भरने के साथ बदलें // "=" splitLines वापसी (encoded.substring (0, encoded.length () -paddingCount) + "==" सबस्ट्रिंग (0, paddingCount)) -।} सार्वजनिक स्थैतिक स्ट्रिंग splitLines (स्ट्रिंग स्ट्रिंग) स्ट्रिंग लाइनों = { "" -किसी (आई इंट = 0- मैं < string.length()- i += splitLinesAt) {lines += string.substring(i, Math.min(string.length(), i + splitLinesAt))-lines += "rn"-}return lines-}public static void main(String[] args) {for (int i = 0- i < args.length- i++) {System.err.println("encoding "" + args[i] + """)-System.out.println(encode(args[i]))-}}}
11
आइए हम जेविक, जीसीजे, जैक्स या अन्य इसी तरह के कंपाइलर और टेस्ट का इस्तेमाल करते हैं, विकिपीडिया लेख से होब्स की बोली का प्रयोग करते हैं:$ $ जावा GCJ -सी Base64.java Base64 "यार, प्रतिष्ठित है न केवल उसकी वजह से है, लेकिन अन्य जानवरों से thissingular जुनून, जो मन की एक वासना है, द्वारा कि निरंतर पीढ़ी में खुशी की aperseverance और अथक ofknowledge द्वारा, किसी भी शारीरिक सुख की कमी उग्रता से अधिक है। "
12
यहां परिणाम है:एन्कोडिंग "मनुष्य प्रतिष्ठित, न केवल उसकी वजह से है, लेकिन अन्य जानवरों से इस singularpassion, जो मन की एक वासना है, कि निरंतर और अथक पीढ़ी ofknowledge में खुशी की aperseverance द्वारा, किसी भी शरीरी खुशी की कमी उग्रता से अधिक कर रहा है। "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4 =
13
सही मैच! इसका अर्थ यह है कि दोनों कार्यक्रम गलत हैं या वे अधिक या कम सही हैं। इस बिंदु पर आप विकिपीडिया लेख की समीक्षा कर सकते हैं और आरएफसी को पढ़ सकते हैं कि क्या हम कुछ भूल गए हैं।