You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 6环境下替换sun.misc.Base64为DatatypeConverter报错如何解决

问题解决方法

直接修复方案

你代码报错是因为DatatypeConverter的printBase64Binary是静态方法,不需要通过new实例化调用。原有代码加new是因为sun.misc.BASE64Encoder是普通类,必须实例化才能调用方法,二者的实现差异不会影响业务逻辑,直接删除new关键字即可。

修改后的正确代码如下:

try {
    byte[] utf8 = textToEncrypt.getBytes("UTF8");
    byte[] enc = encryptionCypher.doFinal(utf8);
    //return new sun.misc.BASE64Encoder().encode(enc);
    return DatatypeConverter.printBase64Binary(enc);
} catch (javax.crypto.BadPaddingException e) {
    throw new EncryptException(e.toString(), e);
} catch (IllegalBlockSizeException e) {
    throw new EncryptException(e.toString(), e);
} catch (UnsupportedEncodingException e) {
    throw new EncryptException(e.toString(), e);
}

Netbeans操作提示

修改后按Alt + Shift + I快捷键即可自动导入javax.xml.bind.DatatypeConverter类,无需手动编写导包语句。

兼容性验证

DatatypeConverter.printBase64Binary的输出规则和sun.misc.BASE64Encoder完全一致,无换行、填充符差异,你可以用同一组测试字节数组分别用两个实现编码,对比输出结果完全相同,不会产生兼容性问题。

如果项目中还有BASE64解码的逻辑,同理替换即可:
原有解码代码:new sun.misc.BASE64Decoder().decodeBuffer(base64Str)
替换为:DatatypeConverter.parseBase64Binary(base64Str)

可选替代方案

如果后续有跨更高Java版本运行的需求(Java 9及以上版本默认移除了javax.xml.bind模块),可以选择引入Apache Commons Codec工具包,最后一个兼容Java 6的版本为1.11,使用方法如下:

  • 引入commons-codec 1.11依赖
  • 替换编码代码为:
import org.apache.commons.codec.binary.Base64;
// 替换原有return行即可
return Base64.encodeBase64String(enc);

该实现和原有sun.misc.BASE64Encoder输出结果完全兼容,且不受JDK版本升级影响,稳定性更高。


内容的提问来源于stack exchange,提问作者Caleb Board

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 23:09:03