需求:在安卓移动端和服务器进行数据交互的时候,有些时候需要上传,下载文件。如果所有的参数都变成字符串,会更加方便。
原理:Base64只是把byte[]数组进行了编码,然后再解码的过程,文档内容无法直接读取。从某些方面来说,进行了“加密”。经过测试一张图片转变成字符串大概会较少1半的大小。
其实我个人觉得不使用Base64 自己通过getByte()和new String() 应该也没问题。编码的格式只要是不会丢失数据的即可。
对于class对象,我们也可以通过ObjectOutputStream和ObjectInputStream来实现。这样都可以转变成字符串的方式进行传输。
下面是一个Demo,如何把一个图片转变成字符串;把字符串转变成图片。
package com.itheima.base64demo_8; import java.io.ByteArrayOutputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import android.os.Bundle; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.graphics.drawable.Drawable; import android.util.Base64; import android.view.Menu; import android.widget.ImageView; public class MainActivity extends Activity { private ImageView mIv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mIv = (ImageView) findViewById(R.id.iv); // 1.从drawable-hdpi得到一个图片 Bitmap sourceBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bbb); // 2.转换成byte[] ByteArrayOutputStream out = new ByteArrayOutputStream(); sourceBitmap.compress(CompressFormat.JPEG, 100, out); byte[] sourceBitmapByteArr = out.toByteArray(); // 3.base64-->string String bitmapString = Base64.encodeToString(sourceBitmapByteArr, Base64.DEFAULT); System.out.println("bitmapString: " + bitmapString); // 4.base64-->string-->byte[] byte[] bitmapDecodeByteArr = Base64.decode(bitmapString, Base64.DEFAULT); // 5.byte[]-->bitmap Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapDecodeByteArr, 0, bitmapDecodeByteArr.length); // 6.bitmap设置为mIv的src,验证是否可以这样进行传递 mIv.setImageBitmap(bitmap); } }
整体来说没什么难点。