Android 使用 Base64 编码

Android 使用 Base64 编码,第1张

概述//1.AndroidBase64编码Stringbase64=android.util.Base64.encodeToString(maps.replace("\"",maps).getBytes(),android.util.Base64.DEFAULT);//2.org.apache.commons.codec.binary.Base64编码Stringbase64Apache=Base64.encodeBase64String(gso
//1. AndroID Base64 编码String base64 = androID.util.Base64.encodetoString(maps.replace("\"", maps).getBytes(), androID.util.Base64.DEFAulT);//2. org.apache.commons.codec.binary.Base64 编码String base64Apache= Base64.encodeBase64String(gson.toJson(map).getBytes());//3. Base64Utilsreturn Base64Utils.encode(gson.toJson(map));

推荐使用 方案3 AndroID和Java后台都使用相同的 Base64Utils :

import java.io.BufferedinputStream;import java.io.bufferedoutputstream;import java.io.BufferedReader;import java.io.BuffereDWriter;import java.io.ByteArrayOutputStream;import java.io.ChararrayWriter;import java.io.file;import java.io.fileinputStream;import java.io.fileOutputStream;import java.io.fileReader;import java.io.fileWriter;import java.io.IOException;import java.io.inputStream;import java.io.OutputStream;import java.io.Reader;import java.io.Writer;public class Base64Utils {    private static Base64Utils utils = null;    public Base64Utils() {    }    /**     * 机能概要:单利 ,懒汉模式     * @return     */    public static Base64Utils getInstance(){        if(utils == null){            synchronized (Base64Utils.class) {                if(utils == null ){                    utils = new Base64Utils();                }            }        }        return utils;    }    /**     * 功能:编码字符串     * @param data     *            源字符串     * @return String     */    public static String encode(String data) {        return new String(encode(data.getBytes()));    }    /**     * 功能:解码字符串     *     * @author jiangshuai     * @date 2016年10月03日     * @param data     *            源字符串     * @return String     */    public static String decode(String data) {        return new String(decode(data.tochararray()));    }    /**     * 功能:编码byte[]     * @param data     *            源     * @return char[]     */    public static char[] encode(byte[] data) {        char[] out = new char[((data.length + 2) / 3) * 4];        for (int i = 0, index = 0; i < data.length; i += 3, index += 4) {            boolean quad = false;            boolean trip = false;            int val = (0xFF & (int) data[i]);            val <<= 8;            if ((i + 1) < data.length) {                val |= (0xFF & (int) data[i + 1]);                trip = true;            }            val <<= 8;            if ((i + 2) < data.length) {                val |= (0xFF & (int) data[i + 2]);                quad = true;            }            out[index + 3] = Alphabet[(quad ? (val & 0x3F) : 64)];            val >>= 6;            out[index + 2] = Alphabet[(trip ? (val & 0x3F) : 64)];            val >>= 6;            out[index + 1] = Alphabet[val & 0x3F];            val >>= 6;            out[index + 0] = Alphabet[val & 0x3F];        }        return out;    }    /**     * 功能:解码     * @param data     *            编码后的字符数组     * @return byte[]     */    public static byte[] decode(char[] data) {        int tempLen = data.length;        for (int ix = 0; ix < data.length; ix++) {            if ((data[ix] > 255) || codes[data[ix]] < 0) {                --tempLen; // ignore non-valID chars and padding            }        }        // calculate required length:        // -- 3 bytes for every 4 valID base64 chars        // -- plus 2 bytes if there are 3 extra base64 chars,        // or plus 1 byte if there are 2 extra.        int len = (tempLen / 4) * 3;        if ((tempLen % 4) == 3) {            len += 2;        }        if ((tempLen % 4) == 2) {            len += 1;        }        byte[] out = new byte[len];        int shift = 0; // # of excess bits stored in accum        int accum = 0; // excess bits        int index = 0;        // we Now go through the entire array (NOT using the 'tempLen' value)        for (int ix = 0; ix < data.length; ix++) {            int value = (data[ix] > 255) ? -1 : codes[data[ix]];            if (value >= 0) { // skip over non-code                accum <<= 6; // bits shift up by 6 each time thru                shift += 6; // loop, with new bits being put in                accum |= value; // at the bottom.                if (shift >= 8) { // whenever there are 8 or more shifted in,                    shift -= 8; // write them out (from the top, leaving any                    out[index++] = // excess at the bottom for next iteration.                            (byte) ((accum >> shift) & 0xff);                }            }        }        // if there is STILL something wrong we just have to throw up Now!        if (index != out.length) {            throw new Error("Miscalculated data length (wrote " + index                    + " instead of " + out.length + ")");        }        return out;    }    /**     * 功能:编码文件     *     * @param file     *            源文件     */    public static voID encode(file file) throws IOException {        if (!file.exists()) {            System.exit(0);        }        else {            byte[] decoded = readBytes(file);            char[] encoded = encode(decoded);            writeChars(file, encoded);        }        file = null;    }    /**     * 功能:解码文件。     *     * @param file     *            源文件     * @throws IOException     */    public static voID decode(file file) throws IOException {        if (!file.exists()) {            System.exit(0);        } else {            char[] encoded = readChars(file);            byte[] decoded = decode(encoded);            writeBytes(file, decoded);        }        file = null;    }    //    // code characters for values 0..63    //    private static char[] Alphabet = "ABCDEFGHIJKLMnopQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="            .tochararray();    //    // lookup table for converting base64 characters to value in range 0..63    //    private static byte[] codes = new byte[256];    static {        for (int i = 0; i < 256; i++) {            codes[i] = -1;            // LoggerUtil.deBUG(i + "&" + codes[i] + " ");        }        for (int i = 'A'; i <= 'Z'; i++) {            codes[i] = (byte) (i - 'A');            // LoggerUtil.deBUG(i + "&" + codes[i] + " ");        }        for (int i = 'a'; i <= 'z'; i++) {            codes[i] = (byte) (26 + i - 'a');            // LoggerUtil.deBUG(i + "&" + codes[i] + " ");        }        for (int i = '0'; i <= '9'; i++) {            codes[i] = (byte) (52 + i - '0');            // LoggerUtil.deBUG(i + "&" + codes[i] + " ");        }        codes['+'] = 62;        codes['/'] = 63;    }    private static byte[] readBytes(file file) throws IOException {        ByteArrayOutputStream baos = new ByteArrayOutputStream();        byte[] b = null;        inputStream fis = null;        inputStream is = null;        try {            fis = new fileinputStream(file);            is = new BufferedinputStream(fis);            int count = 0;            byte[] buf = new byte[16384];            while ((count = is.read(buf)) != -1) {                if (count > 0) {                    baos.write(buf, 0, count);                }            }            b = baos.toByteArray();        } finally {            try {                if (fis != null)                    fis.close();                if (is != null)                    is.close();                if (baos != null)                    baos.close();            } catch (Exception e) {                System.out.println(e);            }        }        return b;    }    private static char[] readChars(file file) throws IOException {        ChararrayWriter caw = new ChararrayWriter();        Reader fr = null;        Reader in = null;        try {            fr = new fileReader(file);            in = new BufferedReader(fr);            int count = 0;            char[] buf = new char[16384];            while ((count = in.read(buf)) != -1) {                if (count > 0) {                    caw.write(buf, 0, count);                }            }        } finally {            try {                if (caw != null)                    caw.close();                if (in != null)                    in.close();                if (fr != null)                    fr.close();            } catch (Exception e) {                System.out.println(e);            }        }        return caw.tochararray();    }    private static voID writeBytes(file file, byte[] data) throws IOException {        OutputStream fos = null;        OutputStream os = null;        try {            fos = new fileOutputStream(file);            os = new bufferedoutputstream(fos);            os.write(data);        } finally {            try {                if (os != null)                    os.close();                if (fos != null)                    fos.close();            } catch (Exception e) {                System.out.println(e);            }        }    }    private static voID writeChars(file file, char[] data) throws IOException {        Writer fos = null;        Writer os = null;        try {            fos = new fileWriter(file);            os = new BuffereDWriter(fos);            os.write(data);        } finally {            try {                if (os != null)                    os.close();                if (fos != null)                    fos.close();            } catch (Exception e) {                e.printstacktrace();            }        }    }}
总结

以上是内存溢出为你收集整理的Android 使用 Base64 编码全部内容,希望文章能够帮你解决Android 使用 Base64 编码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1067306.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存