zoukankan      html  css  js  c++  java
  • Base64简介及与File之间的转换

    Base64到底是什么东西呢?

      Base64是网络上常见的用于传输8bit字节码的编码方式之一 ,是用来将非ASCII字符的数据转换成ASCII字符的一种方法, 有些人和书本会将编码写成加密算法,这其实是欠妥的。因为任何人拿到编码后的数据都能转化成原始数据,算法是透明的,也不存在秘钥的概念。

    为什么要将图片转为base64格式

      便于网络传输:由于某些系统中只能使用ASCII字符,Base64就可以将非ASCII字符的数据转换成ASCII字符。举个简单的例子,你使用SMTP协议 (Simple Mail Transfer Protocol 简单邮件传输协议)来发送邮件。因为这个协议是基于文本的协议,所以如果邮件中包含一幅图片,我们知道图片的存储格式是二进制数据(binary data),而非文本格式,我们必须将二进制的数据编码成文本格式,这时候Base 64 Encoding就派上用场了

      不可见性:我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。

    转换过程:

      文件转Base64字符串:读取文件的输入流,因为文件流是字节流,所以要放到byte数组(字节数组,byte取值范围-128~127)里,

                 然后对byte数组做Base64编码,返回字符串。

      Base64字符串转文件:对Base64编码的字符串进行Base64解码,得到byte数组,利用文件输出流将byte数据写入到文件。

    File转Base64

    public static String file2Base64(File file) {
            if(file==null) {
                return null;
            }
            String base64 = null;
            FileInputStream fin = null;
            try {
                fin = new FileInputStream(file);
                byte[] buff = new byte[fin.available()];
                fin.read(buff);
                base64 = Base64.encode(buff);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (fin != null) {
                    try {
                        fin.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return base64;
        }

    Base64转File 

    public static File base64ToFile(String base64) {
            if(base64==null||"".equals(base64)) {
                return null;
            }
            byte[] buff=Base64.decode(base64);
            File file=null;
            FileOutputStream fout=null;
            try {
                file = File.createTempFile("tmp", null);
                fout=new FileOutputStream(file);
                fout.write(buff);
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(fout!=null) {
                    try {
                        fout.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return file;
        }

    文件流转Base64字符串

       public static String getBase64FromInputStream(InputStream in) {
            // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
            byte[] data = null;
            // 读取图片字节数组
            try {
                ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
                byte[] buff = new byte[100];
                int rc = 0;
                while ((rc = in.read(buff, 0, 100)) > 0) {
                    swapStream.write(buff, 0, rc);
                }
                data = swapStream.toByteArray();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return new String(Base64.encodeBase64(data));
        }
    now ,fight for future
  • 相关阅读:
    30行左右代码实现一个类似httprunner的接口框架
    Python中一些高效的数据操作
    使用jsonpath解析多层嵌套的json响应信息
    操作系统的启动流程
    I/O延迟
    存储器
    多线程和多核芯片
    CPU详解(内核态和用户态)
    操作系统
    计算机组成
  • 原文地址:https://www.cnblogs.com/wffzk/p/15656337.html
Copyright © 2011-2022 走看看