Вопрос
Являются ли Java 8 java.util.Base64
MIME Encoder and Decoder заменой замены для неподдерживаемого внутреннего API Java sun.misc.BASE64Encoder
и sun.misc.BASE64Decoder
?
Что я думаю до сих пор и почему
Основываясь на моих исследованиях и быстрых тестах (см. код ниже) , это должна быть замена замены, потому что
-
sun.misc.BASE64Encoder
на основе своего JavaDoc - это кодировщик символов BASE64, как указано в RFC1521. Этот RFC является частью спецификации MIME... -
java.util.Base64
на основе JavaDoc Использует "Алфавит Base64", как указано в таблице 1 RFC 2045 для операции кодирования и декодирования... в MIME
Предполагая каких-либо существенных изменений в RFC 1521 и 2045 (я не смог их найти) и на основе моего быстрого теста с использованием кодировщика/декодера Java 8 Base64 MIME должно быть хорошо.
Что я ищу
- авторитетный источник, подтверждающий или опровергающий точку "замены замены" OR
- контрпример, в котором показан случай, когда java.util.Base64 имеет другое поведение, чем sun.misc.BASE64Encoder OpenJDK Java 8 реализация (8u40-b25) (BASE64Decoder) ИЛИ
- что бы вы ни думали, ответы на вопрос определенно
Для справки
Мой тестовый код
public class Base64EncodingDecodingRoundTripTest {
public static void main(String[] args) throws IOException {
String test1 = " [email protected]#$%^& *()_+=`| }{[]\\;: \"?><,./ ";
String test2 = test1 + test1;
encodeDecode(test1);
encodeDecode(test2);
}
static void encodeDecode(final String testInputString) throws IOException {
sun.misc.BASE64Encoder unsupportedEncoder = new sun.misc.BASE64Encoder();
sun.misc.BASE64Decoder unsupportedDecoder = new sun.misc.BASE64Decoder();
Base64.Encoder mimeEncoder = java.util.Base64.getMimeEncoder();
Base64.Decoder mimeDecoder = java.util.Base64.getMimeDecoder();
String sunEncoded = unsupportedEncoder.encode(testInputString.getBytes());
System.out.println("sun.misc encoded: " + sunEncoded);
String mimeEncoded = mimeEncoder.encodeToString(testInputString.getBytes());
System.out.println("Java 8 Base64 MIME encoded: " + mimeEncoded);
byte[] mimeDecoded = mimeDecoder.decode(sunEncoded);
String mimeDecodedString = new String(mimeDecoded, Charset.forName("UTF-8"));
byte[] sunDecoded = unsupportedDecoder.decodeBuffer(mimeEncoded); // throws IOException
String sunDecodedString = new String(sunDecoded, Charset.forName("UTF-8"));
System.out.println(String.format("sun.misc decoded: %s | Java 8 Base64 decoded: %s", sunDecodedString, mimeDecodedString));
System.out.println("Decoded results are both equal: " + Objects.equals(sunDecodedString, mimeDecodedString));
System.out.println("Mime decoded result is equal to test input string: " + Objects.equals(testInputString, mimeDecodedString));
System.out.println("\n");
}
}