Является ли Apache Commons Codec Base64 простой заменой sun.misc.BASE64?

Фон

Это дополнительный вопрос к моему исходному вопросу Миграция с sun.misc.BASE64 на Java 8 java.util.Base64 потому что кто-то предположил, что API-интерфейс Apache Commons Codec Base64 является заменой для переноса кода, который использует API-интерфейсы sun.misc Base64.

Вопрос

Является ли org.apache.commons.codec.binary.Base64 заменой неподдерживаемых внутренних API Java sun.misc.BASE64Encoder и sun.misc.BASE64Decoder?

Вставная замена означает, что результаты кодирования/декодирования для обеих реализаций (Apache Commons Codec и sun.misc) одинаковы, поэтому их можно использовать взаимозаменяемо.


person Ivo Mori    schedule 18.05.2020    source источник


Ответы (1)


Стюарт отмечает идеальный контрпример ответа на мой исходный вопрос определенно показывает, что по крайней мере в одном пограничном случае Java 8 java.util.Base64 MIME Encoder дает результат, отличный от неподдерживаемого внутреннего Java API sun.misc.BASE64Encoder.

Итак, давайте еще раз проверим этот крайний случай, используя библиотеку кодеков Apache Commons.

Пограничный тест

Для следующего теста я использую sun.misc.BASE64Encoder реализацию OpenJDK 7 и библиотеку Apache Commons Codec 1.14.

public class StuartMarksBase64EncodingEdgeCaseTestForApacheCommonsCodec {

    public static void main(String[] args) {
        byte[] bytes = new byte[57];
        String enc1 = new sun_misc_jdk7.BASE64Encoder().encode(bytes);
        String enc2 = new String(org.apache.commons.codec.binary.Base64.encodeBase64(bytes));

        System.out.println("enc1 = <" + enc1 + ">");
        System.out.println("enc2 = <" + enc2 + ">");
        System.out.println(enc1.equals(enc2));
    }

}

Затем это приводит к выводу

enc1 = <AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
>
enc2 = <AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>
false

Заключение

Учитывая результаты теста, я пришел к выводу, что API-интерфейс Apache Commons Codec Base64 не является заменой для переноса кода, использующего sun.misc API-интерфейсы Base64.

person Ivo Mori    schedule 18.05.2020