Base64技术:把对象转变成字符串

需求:在安卓移动端和服务器进行数据交互的时候,有些时候需要上传,下载文件。如果所有的参数都变成字符串,会更加方便。

原理: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);

    }

}

整体来说没什么难点。

posted on 2016-11-29 19:10  放纵的卡尔  阅读(4004)  评论(0编辑  收藏  举报

导航