Java:Base64编码快速掌握

定义:

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);
    }

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值