base64编码与文件之间相互转换

在数据传输过程中经常会遇到将文件转为base64编码然后再进行传输,接收方接收到编码数据后,需要进行解码,获取到文件。

JDK 1.8 以后,util 包下自带 Base64 相关工具类,直接拿来使用能很快的解决我们的问题。

利用JDK 自带的 Base 相关工具,写一个如下的工具类来处理 base64 编码与文件的转换:

public class Base64Utils {
	/**
     * 将文件进行base64编码
     *
     * @param filePath 文件路径
     * @return 文件编码后的字符串
     */
    public static String encode (String filePath) throws Exception {
        FileInputStream inputStream = new FileInputStream(filePath);

        byte[] data = new byte[inputStream.available()];
        inputStream.read(data);

        return Base64.getEncoder().encodeToString(data);
    }

    /**
     * 将文件base64编码转为文件
     *
     * @param base64 文件base64编码
     * @param filePath 文件要保存的路径
     */
    public static void decode(String base64, String filePath) throws Exception {
        byte[] data = Base64.getDecoder().decode(base64);
        FileOutputStream outputStream = new FileOutputStream(filePath);

        outputStream.write(data);
    }
    
}

注:以上代码只是为了演示编码与文件之间转换的核心操作,未对异常和流对象进行正确的操作,在实际应用中要注意记录日志以及合理关闭流对象。

使用 NIO 包下的 FilesPaths 工具读取文件,代替 FileInputStream:

public class Base64Utils {
	/**
     * 将文件进行base64编码
     *
     * @param filePath 文件路径
     * @return 文件编码后的字符串
     */
    public static String encode (String filePath) throws Exception {
        byte[] data = Files.readAllBytes(Paths.get(filePath));

        return Base64.getEncoder().encodeToString(data);
    }

    /**
     * 将文件base64编码转为文件
     *
     * @param base64 文件base64编码
     * @param filePath 文件要保存的路径
     */
    public static void decode(String base64, String filePath) throws Exception {
        Files.write(Paths.get(filePath), Base64.getDecoder().decode(base64), StandardOpenOption.CREATE);
    }
}

此方法可以比传统 IO 包下读取文件要方便快捷很多,省去了对流的操作。

Files.write(): 将文件写入指定的位置,第三个参数是表示处理文件的方式,StandardOpenOption.CREATE 如果文件不存在则创建。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章