[Java8]_[增强功能]_[Base64编解码]

本文介绍Base64编码如何解决XML文件存储缩略图及URL中特殊字符的问题,展示了在Java中使用Base64进行编码和解码的示例,包括字符串和文件的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景

  1. 有时候我们需要在XML文件里保存一个缩略图,但是XML不支持不可见字符的保存,如何做?

  2. 当我们需要在URLPOSTPUT一些不可见字符或特殊符号,比如+号,如何做?

说明

  1. Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范.

  2. 对于以上的问题可以通过Base64把缩略图内容直接转码为可见的字符就能存储在XML文档里.

  3. 对于特殊字符作为的URL或者HTTP头或者密码,也可以通过Base64转码之后再提交.

  4. JDK8之前, Java SE并没有提供公共的Base64方法,只有未文档化的sun.misc.BASE64Encoder.现在JDK8在包java.util.Base64里提供了工厂方法实现.

例子

  1. 文件TestBase64.java
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;

/**
 * TestBase64
 */
public class TestBase64 {

    public static void PRINT(String str) {
        System.out.println(str);
    }

    private static void testBase64(){

        // base64编码
        PRINT("====================== testBase64 =======================");
        PRINT("====================== encoder =======================");
        Base64.Encoder encoder = Base64.getEncoder();
        String normalString = "https://infoworld.blog.youkuaiyun.com++";
        String encodedString = encoder.encodeToString( 
                normalString.getBytes(StandardCharsets.UTF_8));
        PRINT(encodedString);

        // base64解码
        PRINT("=================== decoder ==========================");
        Base64.Decoder decoder = Base64.getDecoder();
        byte[] decodedByteArray = decoder.decode(encodedString);
        String buf = new String(decodedByteArray);
        PRINT(buf);

        // 编码文件
        PRINT("====================== mimeEncoder =======================");
        Path originalPath = Paths.get("1.txt");
        Path targetPath = Paths.get("1-base64.txt");
        Base64.Encoder mimeEncoder = Base64.getMimeEncoder();
        try (OutputStream output = Files.newOutputStream(targetPath)) {
            Files.copy(originalPath, mimeEncoder.wrap(output));
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        testBase64();
    }
}
  1. 1-base64.txt
aHR0cHM6Oi8vaW5mb3dvcmxkLmJsb2cuY3Nkbi5u
  1. 输出:
====================== testBase64 =======================
====================== encoder =======================
aHR0cHM6Ly9pbmZvd29ybGQuYmxvZy5jc2RuLm5ldCsr
=================== decoder ==========================
https://infoworld.blog.youkuaiyun.com++
====================== mimeEncoder =======================

参考

Java API Base64

base64百科

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白行微

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值