如何替代被遗弃的BASE64Encoder/BASE64Decoder

2024-05-06 20:38

本文主要是介绍如何替代被遗弃的BASE64Encoder/BASE64Decoder,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

 

一、问题

二、问题原由

三、问题的解决办法(使用新的替代类)

四、扩展


一、问题

关键词:编译警告“警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除”或“警告: BASE64Encoder是内部专用 API, 可能会在未来发行版中删除

场景:在编码时,密码加密或二进制转换的时候,使用了sun.misc.BASE64Encoder编码或sun.misc.BASE64Decoder解码。

System.out.println("===============sun.misc.BASE64Encoder|sun.misc.BASE64Decoder=======================");//以前使用Base64编码/解码final BASE64Encoder encoder = new BASE64Encoder();final BASE64Decoder decoder = new BASE64Decoder();//编码String text = "字符串、Hello, word";String encoderText = encoder.encode(text.getBytes());System.out.println(encoderText);//解码try {byte[] bytes = decoder.decodeBuffer(encoderText);System.out.println(new String(bytes, "UTF-8"));} catch (IOException e) {e.printStackTrace();}

二、问题原由

使用了sun.misc包下的BASE64Encoder类或BASE64Decoder类。这两个类是sun公司的内部方法,并没有在java api中公开过,不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。java8及后面已经弃用了该类,java9已经移除并有新的替代类。

三、问题的解决办法(使用新的替代类)

  • 替代方案:下面给出框架中经常使用jar包中的替代类(实际其他jar中也有替代的类),而且这几种替代的类,可以互相解码彼此编码后的字符串。

1、第一种替代类:jdk1.8的java.util.Base64类

    System.out.println("================jdk1.8:java.util.Base64======================");//java8 使用Base64.Encoder encoder1 = Base64.getEncoder();Base64.Decoder decoder1 = Base64.getDecoder();//编码String text2 = "字符串、Hello world";String encodeValue2 = encoder1.encodeToString(text2.getBytes());System.out.println(encodeValue2);//解码byte[] decode2 = decoder1.decode(encodeValue2);try {System.out.println(new String(decode2, "UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}

2、第二种替代类:Apache的commons-codec的org.apache.commons.codec.binary.Base64类

    System.out.println("================Apache:commons-codec:org.apache.commons.codec.binary.Base64======================");final org.apache.commons.codec.binary.Base64 base64 = new org.apache.commons.codec.binary.Base64();String text1 = "字符串、Hello, word";//编码byte[] bytes = base64.encode(text1.getBytes());System.out.println(bytes);String encodeValue = base64.encodeToString(text1.getBytes());System.out.println(encodeValue);//解码byte[] decode = base64.decode(encodeValue);try {System.out.println(new String(decode, "UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}

3、第三种替代类:spring-core:org.springframework.util.Base64Utils类

    System.out.println("================spring-core:org.springframework.util.Base64Utils======================");String text4 = "字符串|Hello world";//编码String encodeValue4 = Base64Utils.encodeToString(text4.getBytes());System.out.println(encodeValue4);//解码byte[] bytes4 = Base64Utils.decodeFromString(encodeValue4);try {System.out.println(new String(bytes4, "UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}

四、扩展

编码/解码替代的类,可以互相解码彼此编码后的字符串。实际上,他们底层的编码与加码的算法都是一样的,所以使用不用担心别人给你的是哪一种编码类生成字符串。

 

参考文献:
1、http://blog.sina.com.cn/s/blog_5a6efa330102v8st.html
2、https://www.cnblogs.com/alter888/p/9140732.html

这篇关于如何替代被遗弃的BASE64Encoder/BASE64Decoder的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/965320

相关文章

如何导入sun.misc.BASE64Encoder和sum.misc.BASE64Decoder

右击项目名--->Build Path--->Configure Build Path...--->java Build Path--->Access rules:1 rule defined,added to all librar...   --->Edit --->Add...

使用http-request 属性替代action绑定上传URL

在 Element UI 的 <el-upload> 组件中,如果你需要为上传的 HTTP 请求添加自定义的请求头(例如,为了通过身份验证或满足服务器端的特定要求),你不能直接在 <el-upload> 组件的属性中设置这些请求头。但是,你可以通过 http-request 属性来自定义上传的行为,包括设置请求头。 http-request 属性允许你完全控制上传的行为,包括如何构建请求、发送请

Anthropic 创始人 Dario Amodei 谈:关于护城河与风险,AI 大很难直接替代人

护城河的迷思   近期,Anthropic创始人Dario Amodei与投资人Erik Torenberg进行了一场引人关注的对话。他们探讨了AI的护城河与潜在风险。话说,护城河就像酒水的保质期,过了时间就得小心别翻车。Amodei提到,AI虽有强大的潜力,但短期内难以完全替代人类的智慧。这可让很多人松了一口气,毕竟机器发热总比人心复杂,听着都觉得不舒服。 聪明与控制的博弈   Dar

Java中多个ifelse语句的替代设计

今天在改老代码的过程中,亲眼见证了一段30个if-else嵌套的代码... 然后搜集了一些资料做了以下简单整理。 概述 ifelse是任何编程语言的重要组成部分。但是我们编写了大量嵌套的if语句,这使得我们的代码更加复杂和难以维护。 接下来,让我们探索如何简化代码的中的ifelse语句写法。 案例研究 我们经常遇到涉及很多条件的业务逻辑,并且每个逻辑都需要不同的处理方式。以Calculator

十大开源的Cursor AI替代方案

随着AI的兴起,所使用的工具也在不断进步。Cursor AI 作为一个强大的编码助手,已经成为开发人员不可或缺的工具。开源替代方案提供了透明性、个性化和成本效益。本文深入探讨了Cursor AI 的十大开源替代方案,这些方案将丰富您的编码体验,让您更高效。 Cursor AI 的十大开源替代方案 1. TabNine TabNine 是目前最受欢迎的AI驱动代码自动完成工具之一。它可以轻松集

Hbuilder更新后启动后报错替代的解决

今天更新了一下Hbuilder,但是启动后不久就报org.eclipse.ui.internal.Workbench.saveMemen()V错误提示。 如下图: 关了,不一会儿又出来了,挺烦人的。 百度了,也没看到啥解决方案。这种软件都有config等配置的。寻思找找可不可以从配置下手。 最后找到了!!! 菜单栏–》帮助–》还原配置 然后重启就OK了。

替代 Django 默认 User 模型并使用 `django-mysql` 添加数据库备注20240904

替代 Django 默认 User 模型并使用 django-mysql 添加数据库备注 前言 在 Django 项目开发中,默认的 User 模型虽然能够满足许多基础需求,但在实际项目中我们常常需要对用户模型进行定制化。通过覆盖默认的 User 模型,我们可以根据具体的业务需求添加额外的字段、修改字段属性等。同时,使用 django-mysql,我们还可以在数据库迁移时为字段添加备注,提高数

云原生 | 在 Kubernetes 中使用 Cilium 替代 Calico 网络插件实践指南!

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 简述介绍 什么是 Cilium? Cilium 是一款开源软件,它基于一种名为eBPF的新的Linux内核技术提供动力,用于透明地保护使用 Docker 和 Kubernetes 等Linux 容器管理平台中部署的应用程序服务之间的网络连接,Cilium 主要使用场景是在 Kubernetes 中,但 Cilium 的优势并

ArmSoM CM5 RK3576核心板推出,强势替代树莓派CM4

ArmSoM团队隆重推出全新的CM5 RK3576核心板,这款模块专为嵌入式开发者设计,凭借其强大的性能与丰富的扩展性,完美替代树莓派CM4,成为开发者们的理想选择。 CM5核心板采用了先进的RK3576 SoC,凭借卓越的计算能力和出色的能效表现,在各类应用中表现出色。相比树莓派CM4,CM5核心板在多个方面实现了显著的升级,不仅性能更强,还拥有更多的接口和扩展选项,适合多样化的应用需求。

一款可以替代Notepad++的免费高级文本编辑器

Kate 文本编辑器是一款跨平台的免费高级文本编辑器,具有丰富的功能和特性。它支持标签页、代码高亮、多文件查找、垂直/水平视图、侧边栏、颜色主题等特性,类似于Notepad++。它以其多功能性和易用性广受好评。Kate 支持多文档界面(MDI)和标签页,允许用户同时编辑和查看多个文件,无论是单独在一个窗口中还是在分割视图中。 相较于其他文本编辑器,Kate 提供了更为全面的功能和更好的跨平台支持