zoukankan      html  css  js  c++  java
  • 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);
    
        }
    
    }

    整体来说没什么难点。

  • 相关阅读:
    Spring Boot 启动加载数据 CommandLineRunner(一般用于项目启动时,用户信息的缓存)
    缓存穿透、缓存并发、缓存失效之思路变迁
    知识点的梳理
    windows下查找java应用占用CPU过高问题
    Java开发中的Memcache原理及实现
    malloc函数详解 C语言逻辑运算符
    PCH 警告:标头停止点不能位于宏或#if块中
    绪论-第一章-《数据结构题集》
    线性表的顺序存储结构--用数组实现
    第二章 《C++ Primer Plus》
  • 原文地址:https://www.cnblogs.com/tinyclear/p/6114955.html
Copyright © 2011-2022 走看看