赞
踩
定义:
Base64 是一种二进制数据的编码方式,类比UTF-8、UTF-16是对字符串的编码方式一样,能将任意二进制文件用 64 种字元组合成字串的方法, 彼此之间是可以互相转换的. 也常用来表示字串加密后的内容。
Base64 编码步骤:
第一步,将每三个字节作为一组,一共是24个二进制位
第二步,将这24个二进制位分为四组,每个组有6个二进制位 (因为 6 位 2 进制最大数为 63)
第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节
第四步,根据序号表(0-63),得到扩展后的每个字节的对应符号就是Base64的编码值
方式一:sun 包下的 BASE64Encoder、BASE64Decoder
一、JDK里的sun.misc包下的 BASE64Encoder 和 BASE64Decoder 这两个类, 缺点是编码和解码的效率不高
- public static void main(String[] args) throws IOException {
- String str = "test";
- BASE64Encoder base64Encoder = new BASE64Encoder();
- String encoderStr = base64Encoder.encode(str.getBytes(StandardCharsets.UTF_8));
- BASE64Decoder base64Decoder = new BASE64Decoder();
- byte[] decoderByte = base64Decoder.decodeBuffer(encoderStr );
- String decoderStr = new String(decoderByte);
- System.out.println(decoderStr);
- }
方法二:apache 包下的 Base64
二、比 sun 包更精简,实际执行效率高不少, 缺点是需要引用 Apache Commons Codec, 但 tomcat 容器下开发, 一般都自动引入可直接使用。
- public static void main(String[] args) throws IOException {
- String str = "test";
- Base64 base64 = new Base64();
- String encoderdStr = base64.encodeToString(str.getBytes(StandardCharsets.UTF_8));
- byte decoderByte = base64.decode(encoderdStr);
- String decoderStr = new String(decoderByte);
- System.out.println(decoderStr;
- }
方法三:util 包下的 Base64
三、Java 8 提供的 Base64 效率最高. 实际测试编码与解码速度, Java 8 的 Base64 要比 sun包下的要快大约 11 倍,比 Apache 的快大约 3 倍。
- public static void main(String[] args) {
- String str = "test";
- Base64.Encoder encoder = Base64.getEncoder();
- String encoderStr = encoder.encodeToString(str.getBytes(StandardCharsets.UTF_8));
- Base64.Decoder decoder = Base64.getDecoder();
- byte[] decoderByte = decoder.decode(encoderStr);
- String decoderStr = new String(decoderByte);
- System.out.println(decoderStr);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。