需求:在安卓移動端和服務器進行數據交互的時候,有些時候需要上傳,下載文件。如果所有的參數都變成字符串,會更加方便。
原理: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); } }
整體來說沒什么難點。