【问题标题】:Is Apache Commons Codec Base64 a drop-in replacement for sun.misc.BASE64?Apache Commons Codec Base64 是 sun.misc.BASE64 的替代品吗?
【发布时间】:2020-09-03 21:27:52
【问题描述】:

背景

这是我最初的问题 Migrating from sun.misc.BASE64 to Java 8 java.util.Base64 的后续问题,因为 someone suggested Apache Commons Codec Base64 API 是迁移使用 sun.misc Base64 API 的代码的替代品。

问题

org.apache.commons.codec.binary.Base64 是不受支持的内部 Java API sun.misc.BASE64Encodersun.misc.BASE64Decoder 的直接替换吗?

插入式替换意味着两种实现(Apache Commons Codec 和sun.misc)的编码/解码结果是相等的,因此它们可以互换使用.

【问题讨论】:

    标签: java base64 encoder


    【解决方案1】:

    Stuart Marks perfect counter-example answer 到我的original question 明确表明,对于至少一种极端情况,Java 8 java.util.Base64 MIME 编码器提供的结果与不受支持的内部 Java API sun.misc.BASE64Encoder 不同。

    所以让我们使用Apache Commons Codec library 再次检查该边缘情况。

    边缘案例测试

    对于以下测试,我使用 OpenJDK 7 和 Apache Commons Codec library 1.14 的 sun.misc.BASE64Encoder 实现。

    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 API 的代码。

    【讨论】:

      猜你喜欢
      • 2016-05-19
      • 2013-02-19
      • 1970-01-01
      • 2017-10-16
      • 2017-04-18
      • 1970-01-01
      • 2014-10-05
      • 2020-09-29
      • 2012-11-05
      相关资源
      最近更新 更多