base64编码

将二进制数据转化为64种人眼可识别的字符串a-z, A-Z, 0-9, /, +

可以将一些二进制文件编码成可识别的字符串

Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。

作用:

有些网站html, 要展示图片, 可以将图片的base64编码集成在网页的html中
电子邮件发送图片, 会将图片进行base64编码之后再传输

编码表

base64编码

 

示例代码:

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Base64;
import android.widget.ImageView;

import java.io.ByteArrayOutputStream;

public class MainActivity extends AppCompatActivity {

    private ImageView ivImage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ivImage = (ImageView) findViewById(R.id.iv_image);
        new Thread() {
            @Override
            public void run() {
                //对图片进行base64编码
                Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.xxx);

                ByteArrayOutputStream out = new ByteArrayOutputStream();

                //将图片输出到输出流中
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);

                //将图片转为字节数组
                byte[] bytes = out.toByteArray();

                //byte[] encode = Base64.encode(bytes, Base64.DEFAULT);
                String str = Base64.encodeToString(bytes, Base64.DEFAULT);

                System.out.println("base64:" + str);

                //对base64进行解码
                byte[] decode = Base64.decode(str.getBytes(), Base64.DEFAULT);

                final Bitmap bitmap1 = BitmapFactory.decodeByteArray(decode, 0, decode.length);

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        ivImage.setImageBitmap(bitmap1);
                    }
                });

            }
        }.start();


    }
}

<!--activity_main.xml-->
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:andro
    xmlns:tools="http://schemas.android.com/tools"
    android:
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.jcf.base64demo.MainActivity">
    <ImageView
        android:
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
       />
</RelativeLayout>