首页 > 其他分享 >《数据篇》base64,编码和解码

《数据篇》base64,编码和解码

时间:2024-02-04 16:55:06浏览次数:20  
标签:encodedText 编码 Base64 Java 解码 base64 final

链接:https://blog.csdn.net/qq_40006446/article/details/80236496

关于base64编码Encode和Decode编码的几种方式

Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便。在实际应用上,Base64除了能将Binary资料可视化之外,也常用来表示字串加密过后的内容。如果要使用Java 程式语言来实作Base64的编码与解码功能,可以参考本篇文章的作法。

早期作法

早期在Java上做Base64的编码与解码,会使用到JDK里sun.misc套件下的BASE64Encoder和BASE64Decoder这两个类别,用法如下:

final BASE64Encoder encoder = new BASE64Encoder();
final BASE64Decoder decoder = new BASE64Decoder();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = encoder.encode(textByte);
System.out.println(encodedText);
//解码
System.out.println(new String(decoder.decodeBuffer(encodedText), "UTF-8"));

从以上程式可以发现,在Java用Base64一点都不难,不用几行程式码就解决了!只是这个sun.mis c套件所提供的Base64功能,编码和解码的效率并不太好,而且在以后的Java版本可能就不被支援了,完全不建议使用。

Apache Commons Codec作法

Apache Commons Codec有提供Base64的编码与解码功能,会使用到org.apache.commons.codec.binary套件下的Base64类别,用法如下

final Base64 base64 = new Base64();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = base64.encodeToString(textByte);
System.out.println(encodedText);
//解码
System.out.println(new String(base64.decode(encodedText), "UTF-8"));

以上的程式码看起来又比早期用sun.mis c套件还要更精简,效能实际执行起来也快了不少。缺点是需要引用Apache Commons Codec,很麻烦。

Java 8之后的作法

Java 8的java.util套件中,新增了Base64的类别,可以用来处理Base64的编码与解码,用法如下:

final Base64.Decoder decoder = Base64.getDecoder();
final Base64.Encoder encoder = Base64.getEncoder();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = encoder.encodeToString(textByte);
System.out.println(encodedText);
//解码
System.out.println(new String(decoder.decode(encodedText), "UTF-8"));

与sun.mis c套件和Apache Commons Codec所提供的Base64编解码器来比较的话,Java 8提供的Base64拥有更好的效能。实际测试编码与解码速度的话,Java 8提供的Base64,要比sun.mis c套件提供的还要快至少11倍,比Apache Commons Codec提供的还要快至少3倍。因此在Java上若要使用Base64,这个Java 8底下的java .util套件所提供的Base64类别绝对是首选!

标签:encodedText,编码,Base64,Java,解码,base64,final
From: https://www.cnblogs.com/fusio/p/18006519

相关文章

  • 编码规范
    IDEA常用设置自动生成类注释和方法注释Ctrl+Alt+L格式化代码类注释/***@Description:*@Author:*@CreateTime:${DATE}*/类属性注释:/***用户名*/类方法注释:/***@Description:*@param:$param$*@return:$return$*/类注释方......
  • 提升编码幸福感的秘密「GitHub 热点速览」
    写代码是一个充满挑战的事情,在这段充满挑战的旅途中,我们都渴望找到那个提升幸福感的秘密。没准是更先进或是更快的工具,希望本期热点速递的开源项目,能给你带来启迪和乐趣,上菜!第一个上场的是一款用Rust写的代码编辑器:Zed,因为它足够快、足够先进。全栈不等于全占......
  • 《编码: 隐匿在计算机软硬件背后的语言》PDF
    内容简介本书讲述的是计算机工作原理。作者用丰富的想象和清晰的笔墨将看似繁杂的理论阐述得通俗易懂,你丝毫不会感到枯燥和生硬。更重要的是,你会因此而获得对计算机工作原理较深刻的理解。这种理解不是抽象层面上的,而是具有一定深度的。作者简介CharlesPetzold从1984年开始编写个......
  • 加密 编码
    加密编码识别算法编码类型:1、看密文位数2、看密文特征(数字、字母大小写、符号)3、看当前密文存在地方(数据库、web) 密码存储加密MD5:32位由数字0-9和字母a-f组成的字符串示例:dc649b83cf1a2dae2540b6b200aeca80SHA1:40位由数字0-9和字母a-f组成的字符串NTLM:Windows的哈希......
  • ILRuntime编码中如何注意性能问题
    一、避免频繁的反射操作在使用ILRuntime时,我们需要频繁地进行反射操作,例如获取类型、获取方法、获取属性等等。反射操作是非常耗费性能的,所以我们需要尽可能地避免频繁的反射操作。例如,我们需要获取一个类型的所有属性,我们可以使用以下代码:PropertyInfo[]properties=typeof......
  • C# 自己写的编码机制,将任意字节数组和可打印中文字符串相互转换
    正常情况下咱们可以用Base64将字节数组转成可打印字符串,但是有的时候咱们需要编码后具有一定的保密性,很明显Base64就不适用了,网上有个与熊论道就挺有意思的,于是我也研究学习了下,自己实现了一个将字节流编码为可打印(可拷贝)中文字符串的功能,反之,也能将中文字符串解码为原始字节流......
  • Klocwork 2023.4发布:问题匹配算法升级,编码标准全面支持!
    Klocwork2023.4的新增功能Klocwork2023.4改进了问题匹配的算法,为桌面端和CI集成构建之间的结果提供了更大的一致性,以及连续构建之间的问题匹配。Klocwork的最新版本还改进了C/C++语言的分析引擎,减少了误报/漏报,跨过程跟踪数组索引中的值和具有常量表达式的值。此外,还对IDE插......
  • oracle数据表中栏位里的汉字显示未utf-8编码
    问题:解决使用System.Text.Json.JsonSerializer序列化dto为字符串时,要传入如下配置 //解决中文存入数据库后变成UTF-8编码的问题      privateJsonSerializerOptions_jsonSerializerOptions=newJsonSerializerOptions      {         Enc......
  • 计算机字符编码
    目录基础知识ASCII码UnicodeUnicode的问题utf8GB2312是什么基础知识计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说,按照何种规则将字符存储在计算机中,如'a'用什么表示,称为"编码";反之,将存储在计算机中的二进制......
  • 【计算机】字符编码的发展与关系
    【计算机】字符编码的发展与关系编码方案与字符集字符编码说到底就是一种将字符存储在计算机中的方式,如通常会将字符与一个二进制串对应,从而映射到字节流中。而表示字符与二进制串对应关系的表叫做字符集,而具体将对应的二进制串映射到字节流中的方法则叫编码方案。所以说编码方......