将二进制数据转化为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编码之后再传输
编码表
示例代码:
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:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.jcf.base64demo.MainActivity"> <ImageView android:id="@+id/iv_image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>