java - Apache Commons Codec Base64 是 sun.misc.BASE64 的替代品吗?
问题描述
背景
这是我原来的问题Migrating from sun.misc.BASE64 to Java 8 java.util.Base64的后续问题,因为有人建议Apache Commons Codec Base64 API 是迁移使用sun.misc
Base64 API的代码的替代品.
问题
是不受支持的内部 Java API的直接org.apache.commons.codec.binary.Base64
替代品吗?sun.misc.BASE64Encoder
sun.misc.BASE64Decoder
插入式替换意味着两种实现(Apache Commons Codec 和sun.misc
)的编码/解码结果是相等的,因此它们可以互换使用。
解决方案
Stuart Marks对我最初的问题的完美反例回答明确表明,对于至少一种极端情况,Java 8 java.util.Base64
MIME 编码器提供的结果与不受支持的内部 Java API 不同sun.misc.BASE64Encoder
。
因此,让我们使用Apache Commons Codec library再次检查该边缘情况。
边缘案例测试
对于以下测试,我使用sun.misc.BASE64Encoder
OpenJDK 7 和 Apache Commons Codec library 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不是迁移使用Base64 API的代码的直接替代品。sun.misc
推荐阅读
- jekyll - 液体条件渲染
- java - 无法创建 com.example.architectureexample.NoteViewModel 类的实例
- c++ - 如何一次将缓冲区数据从客户端发送到服务器 4 个字符?(C++)
- laravel - Laravel + dompdf + tinymce 不生成pdf
- android - Android 数据绑定 @{} 与 @={}
- powershell - 两个目录的比较
- python - Python 中的 QA 报告需要比较和识别多列对中两个数据帧之间的不匹配
- reactjs - 使用钩子时删除全局状态下的嵌套数组项
- kotlin - 为什么我得到“推断类型是 Observable
!但可观察 预期”具有可观察的 Kotlin 扩展功能? - mysql - MySQL 按标题排序,然后分组 ID