এখানে আমার দুটি সেন্ট রয়েছে ... জাভা 8 এর বেস 64 এর নিজস্ব প্রয়োগ রয়েছে । তবে আমি কিছুটা বিরক্তিকর পার্থক্য পেয়েছি। উদাহরণস্বরূপ, আমি একটি কোড উদাহরণ সরবরাহ করব:
আমার কোডেক মোড়ক:
public interface MyCodec
{
static String apacheDecode(String encodedStr)
{
return new String(Base64.decodeBase64(encodedStr), Charset.forName("UTF-8"));
}
static String apacheEncode(String decodedStr)
{
byte[] decodedByteArr = decodedStr.getBytes(Charset.forName("UTF-8"));
return Base64.encodeBase64String(decodedByteArr);
}
static String javaDecode(String encodedStr)
{
return new String(java.util.Base64.getDecoder().decode(encodedStr), Charset.forName("UTF-8"));
}
static String javaEncode(String decodedStr)
{
byte[] decodedByteArr = decodedStr.getBytes(Charset.forName("UTF-8"));
return java.util.Base64.getEncoder().encodeToString(decodedByteArr);
}
}
পরীক্ষা ক্লাস:
public class CodecDemo
{
public static void main(String[] args)
{
String decodedText = "Hello World!";
String encodedApacheText = MyCodec.apacheEncode(decodedText);
String encodedJavaText = MyCodec.javaEncode(decodedText);
System.out.println("Apache encoded text: " + MyCodec.apacheEncode(encodedApacheText));
System.out.println("Java encoded text: " + MyCodec.javaEncode(encodedJavaText));
System.out.println("Encoded results equal: " + encodedApacheText.equals(encodedJavaText));
System.out.println("Apache decode Java: " + MyCodec.apacheDecode(encodedJavaText));
System.out.println("Java decode Java: " + MyCodec.javaDecode(encodedJavaText));
System.out.println("Apache decode Apache: " + MyCodec.apacheDecode(encodedApacheText));
System.out.println("Java decode Apache: " + MyCodec.javaDecode(encodedApacheText));
}
}
আউটপুট:
Apache encoded text: U0dWc2JHOGdWMjl5YkdRaA0K
Java encoded text: U0dWc2JHOGdWMjl5YkdRaA==
Encoded results equal: false
Apache decode Java: Hello World!
Java decode Java: Hello World!
Apache decode Apache: Hello World!
Exception in thread "main" java.lang.IllegalArgumentException: Illegal base64 character d
at java.util.Base64$Decoder.decode0(Base64.java:714)
at java.util.Base64$Decoder.decode(Base64.java:526)
at java.util.Base64$Decoder.decode(Base64.java:549)
লক্ষ্য করুন যে অ্যাপাচি এনকোডযুক্ত পাঠ্যের শেষে অতিরিক্ত লাইন ব্রেক (সাদা স্থান) রয়েছে। অতএব, বেস কোড বাস্তবায়নে নির্বিশেষে আমার কোডেক একই ফলাফল আনার জন্য আমাকে trim()
অ্যাপাচি এনকোডড পাঠ্যে কল করতে হয়েছিল। আমার ক্ষেত্রে, আমি সহজভাবে আমার কোডেকের উপরোক্ত পদ্ধতি কলটি apacheDecode()
নিম্নলিখিত হিসাবে যুক্ত করেছি:
return Base64.encodeBase64String(decodedByteArr).trim();
একবার এই পরিবর্তনটি করা হয়ে গেলে, ফলাফলগুলি আমি যা দিয়ে প্রত্যাশা করেছিলাম তা হ'ল:
Apache encoded text: U0dWc2JHOGdWMjl5YkdRaA==
Java encoded text: U0dWc2JHOGdWMjl5YkdRaA==
Encoded results equal: true
Apache decode Java: Hello World!
Java decode Java: Hello World!
Apache decode Apache: Hello World!
Java decode Apache: Hello World!
উপসংহার : আপনি যদি অ্যাপাচি বেস 64 থেকে জাভাতে যেতে চান তবে আপনার অবশ্যই:
- আপনার অ্যাপাচি ডিকোডার দিয়ে এনকোডযুক্ত পাঠ্যটি ডিকোড করুন।
- জাভা সহ এনকোড ফলাফল (প্লেইন) পাঠ্য।
আপনি যদি এই পদক্ষেপগুলি অনুসরণ না করে স্যুইচ করেন তবে সম্ভবত আপনি সমস্যার মধ্যে পড়ে যাবেন। আমি এই আবিষ্কার করেছি।