Apache Commons Codec Base64 是 sun.misc.BASE64 的替代品吗?

Is Apache Commons Codec Base64 a drop-in replacement for sun.misc.BASE64?

背景

这是我最初的问题 because 的后续问题,即 Apache Commons Codec Base64 API 是迁移使用 sun.misc Base64 的代码的替代品APIs.

问题

org.apache.commons.codec.binary.Base64是否是不受支持的内部 Java[=45] 的替代品 =] sun.misc.BASE64Encodersun.misc.BASE64Decoder?

直接替换 意味着 encoding/decoding 来自两种实现(Apache Commons Codec 和 sun.misc) 是相等的,因此它们可以互换使用。

to my 明确表明,对于至少一种边缘情况,Java 8 java.util.Base64 MIME 编码器提供的结果与不受支持的内部 Java API sun.misc.BASE64Encoder.

所以让我们使用 Apache Commons Codec library.

再次检查边缘情况

边缘案例测试

对于以下测试,我使用 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

结论

鉴于测试输出,我得出结论 Apache Commons Codec Base64 API 不是替代品迁移使用 sun.misc Base64 APIs.

的代码