Base64Utils

作者: 叫子非鱼啊 | 来源:发表于2020-03-30 22:05 被阅读0次
    base64的相关功能类

    关于base64常用的功能也就是一下四个了,最常用还是文件和base64的互转。毕竟很方便,缺点就是要注意文件转base64编码的大小了。毕竟编码后的字符串要比原文件大很多的。具体可以查看Base64编码的原理。
    对于String和base64的编码和解码,觉得用到的地方真的不多,达不到加密的效果。用这种实现加解密真的只能说是掩耳盗铃,欺骗自己的眼睛,达不到真的加密效果(如果说我们平常看到的是白话文,那它就是文言文,需要我们稍微的做一些翻译,至于翻译呢,谁都可以把它转换成最开始的白话文)。
    但是文件和Base64编码的字符串就很有用了,多个系统之间文件的传输必不可少。

    • 文件转base64
    • base64转文件
    • String 转 Base64
    • base64转String
    package com.demo;
    
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    /**
     * base64的相关功能类<br>
     *    文件转base64
     * <br>
     *    base64转文件
     * <br>
     *    String 转 Base64
     * <br>
     *    base64转String
     * 
     * @author lxh96
     *
     */
    public class Base64Utils {
        public static void main(String[] args) throws Exception {
    
            //本地文件地址
            String filePath = "C:/Users/lxh96/Pictures/B01.jpg";
            String str = FileToBase64ByLocal(filePath);
            System.out.println(str);
            //在线文件地址
            String string = "https://upload.jianshu.io/users/upload_avatars/20442147/dbfd2e04-5282-4091-b683-b5871f8af36e.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/240/h/240";
            String str1 = FileToBase64ByOnline(string);
            System.out.println(str1);
    
            // 字符串转换成base64
            String string2 = "hello world!!!---- 你好!!";
            String str2 = strConvertBase64(string2);
            System.out.println(str2);
    
            // base64转换成String
            System.out.println(Base64ConvertStr(str2));
    
            // base64转成文件
    //      System.out.println("生成文件"+Base64Utils.decoderBase64File(str, "C:/Users/lxh96/Pictures/test.png"));
    
        }
    
        /**
         * 本地文件转换成base64字符串
         * 
         * @param filePath
         * @return String
         */
        public static String FileToBase64ByLocal(String filePath) {// 将文件文件转化为字节数组字符串,并对其进行Base64编码处理
    
            InputStream in = null;
            byte[] data = null;
    
            // 读取文件字节数组
            try {
                in = new FileInputStream(filePath);
    
                data = new byte[in.available()];
                in.read(data);
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(in == null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        System.out.println("流关闭异常"+e);
                    }
                }
            }
            // 对字节数组Base64编码
            BASE64Encoder encoder = new BASE64Encoder();
    
            return encoder.encode(data);// 返回Base64编码过的字节数组字符串
        }
    
        /**
         * 在线文件转换成base64字符串
         * 
         * @param fileURL
         * @return String
         */
        public static String FileToBase64ByOnline(String fileURL) {
            ByteArrayOutputStream data = new ByteArrayOutputStream();
            InputStream is = null ;
            try {
                // 创建URL
                URL url = new URL(fileURL);
                byte[] by = new byte[1024];
                // 创建链接
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5000);
                is = conn.getInputStream();
                // 将内容读取内存中
                int len = -1;
                while ((len = is.read(by)) != -1) {
                    data.write(by, 0, len);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                // 关闭流
                try {
                    is.close();
                } catch (IOException e) {
                    System.out.println("流关闭异常"+e);
                }
            }
            // 对字节数组Base64编码
            BASE64Encoder encoder = new BASE64Encoder();
            return encoder.encode(data.toByteArray());
        }
    
        /**
         * 将base64字符解码保存文件
         * 
         * @param base64Code 解码
         * @param targetPath 要存的地址
         * @return String 路径
         */
    
        public static String decoderBase64File(String base64Code, String targetPath) {
            File file = new File(targetPath);
            FileOutputStream out = null;
            try {
                if (file.exists()) {
                    System.out.println(targetPath + " 文件已经存在,不能转换为文件");
                    return null;
                } else {
                    boolean createNewFile = file.createNewFile();
                    if (createNewFile) {
                        System.out.println("文件创建成功!");
                    } else {
                        System.out.println("文件创建遇到问题。");
                    }
                }
                byte[] buffer = new BASE64Decoder().decodeBuffer(base64Code);
                out = new FileOutputStream(targetPath);
                out.write(buffer);
                System.out.println("文件保存成功!");
            } catch (Exception e) {
                System.out.println("文件base64编码转换失败!" + e);
                targetPath = "";
            } finally {
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
    
            return targetPath;
        }
    
        /**
         * 将字符串转换成Base64编码
         * 
         * @param tagertStr 要转换的字符串
         * @return String base64编码后的字符串
         */
        public static String strConvertBase64(String tagertStr) {
            byte[] value;
            try {
                value = tagertStr.getBytes("UTF-8");
                BASE64Encoder encoder = new BASE64Encoder();
                return new String(encoder.encode(value));
            } catch (Exception e) {
                System.out.println("字符串base64编码转换失败!" + e);
            }
            return null;
        }
    
        /**
         * base64解码转String UTF-8
         * @param base64Str
         * @return String
         */
        public static String Base64ConvertStr(String base64Str) {
            try {
                BASE64Decoder decoder = new BASE64Decoder();
                byte[] bytes = decoder.decodeBuffer(base64Str);
                return new String(bytes, "UTF-8");
            } catch (Exception e) {
                System.out.println("base64转String失败!" + e);
            }
            return null;
        }
    }
    

    代码参考网络,对里边的一些方法进行了稍微的修改。将关闭流放在了finally中,因为关闭前如果报错,直接走进catch中,会导致流不能正常关闭。

    至于输入输出流不关闭的影响,会在之后的文章中介绍(请给我一些测试的时间)。

    本想文章中放一些美食的图片,想想还是算了吧,怕你们文章没看完出去点外卖了。

    相关文章

      网友评论

        本文标题:Base64Utils

        本文链接:https://www.haomeiwen.com/subject/xxmbuhtx.html