1. 程式人生 > >Android Base64的完美解決方案

Android Base64的完美解決方案

public class Base64Encoder {  
    private static final char last2byte = (char) Integer  
            .parseInt("00000011", 2);  
    private static final char last4byte = (char) Integer  
            .parseInt("00001111", 2);  
    private static final char last6byte = (char) Integer  
            .parseInt("00111111", 2);  
    private static final char lead6byte = (char) Integer  
            .parseInt("11111100", 2);  
    private static final char lead4byte = (char) Integer  
            .parseInt("11110000", 2);  
    private static final char lead2byte = (char) Integer  
            .parseInt("11000000", 2);  
    private static final char[] encodeTable = new char[] { 'A', 'B', 'C', 'D',  
            'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',  
            'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',  
            'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',  
            'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3',  
            '4', '5', '6', '7', '8', '9', '+', '/' };  
  
    /** 
     * Base64 encoding. 
     *  
     * @param from 
     *            The src data. 
     * @return 
     */  
    public static String encode(byte[] from) {  
        StringBuffer to = new StringBuffer((int) (from.length * 1.34) + 3);  
        int num = 0;  
        char currentByte = 0;  
        for (int i = 0; i < from.length; i++) {  
            num = num % 8;  
            while (num < 8) {  
                switch (num) {  
                case 0:  
                    currentByte = (char) (from[i] & lead6byte);  
                    currentByte = (char) (currentByte >>> 2);  
                    break;  
                case 2:  
                    currentByte = (char) (from[i] & last6byte);  
                    break;  
                case 4:  
                    currentByte = (char) (from[i] & last4byte);  
                    currentByte = (char) (currentByte << 2);  
                    if ((i + 1) < from.length) {  
                        currentByte |= (from[i + 1] & lead2byte) >>> 6;  
                    }  
                    break;  
                case 6:  
                    currentByte = (char) (from[i] & last2byte);  
                    currentByte = (char) (currentByte << 4);  
                    if ((i + 1) < from.length) {  
                        currentByte |= (from[i + 1] & lead4byte) >>> 4;  
                    }  
                    break;  
                }  
                to.append(encodeTable[currentByte]);  
                num += 6;  
            }  
        }  
        if (to.length() % 4 != 0) {  
            for (int i = 4 - to.length() % 4; i > 0; i--) {  
                to.append("=");  
            }  
        }  
        return to.toString();  
    }  
} 

相關推薦

Android Base64完美解決方案

public class Base64Encoder { private static final char last2byte = (char) Integer .parseInt("00000011", 2); pri

Android 中 Fragment 巢狀 Fragment使用存在的bug附完美解決方案

原文地址:https://blog.csdn.net/u014365133/article/details/73176068 自從Android3.0引入了Fragment之後,使用Activity去巢狀一些Fragment的做法也變得更加流行,這確實是Fra

Android 沉浸式狀態列完美解決方案

現在搜尋Android 沉浸式狀態列,真的是一堆一堆,寫的特別多,但是真正用的舒服的真沒有,在這裡自己整理一下開發記錄   注意,在使用這個步驟過程之前,請把之前設定的程式碼註釋一下 把佈局帶有android:fitsSystemWindows註釋掉 style檔案中凡是在style.xml

Unity Android APP il2cpp熱更完美解決方案

1. 簡介 這是Unity Android APP il2cpp熱更完美解決方案的Demo(Git地址)的說明。 和現有的熱更解決方案不同的是,他不會引入多餘的語言(只是UnityScript,c#…),對Unity程式設計和編碼沒有任何限制。你可以在預置和場景裡的GameObjec

android獲取裝置唯一標識完美解決方案

這是Android系統為開發者提供的用於標識手機裝置的串號,也是各種方法中普適性較高的,可以說幾乎所有的裝置都可以返回這個串號,並且唯一性良好。 這個DEVICE_ID可以同通過下面的方法獲取: TelephonyManager tm = (TelephonyManager)getSystemServi

Android中EditText被輸入法軟鍵盤遮擋的完美解決方案(非全屏模式下)

1、不要給EditText的背景設定為@null 清單檔案中為activity設定屬性 程式碼中設定顯示輸入法 android:windowSoftInputMode=”stateVisible

android 6.0, 7.0之動態申請許可權完美解決方案

android 7.0 動態申請許可權工具類 對於實際開發的程式原來說,對許可權申請肯定不會陌生.由於android 6.0 之後有些許可權不僅需要在 mainfest中註冊,

[Android]Delphi/C++ Builder 開發 Android 程式啟動畫面簡單完美解決方案

前面和音兒一起研究 Android 下啟動畫面的問題,雖然問題得到了解決,但是,總是感覺太麻煩,主要的問題: 1、需要手工去修改XML檔案; 2、而且需要對系統本身做出修改; 3、方案還不夠完善,需要較多的步驟; 現在,經常不斷的折騰,終於找到了一個

android獲取裝置唯一標識完美解決方案的思考以及實現方式

前言 由於在開發中需要開發遊客模式,在使用者沒有登入的情況下必須確保裝置的唯一性,於是慣性思維想到的肯定是使用DevicesId 來作為裝置的唯一標識,用以代替使用者登入以後的唯一識別符號。 但是由於國內複雜的rom定製情況,以及使用者許可權禁止的情況。De

Android下zip壓縮檔案加密解密的完美解決方案

前言 一個多月前,因專案需要對Java語言下的zip格式壓縮檔案的處理作了一些瞭解,嘗試了多種開源專案並寫了幾篇部落格做記錄:  ZIP4J,作為解決了我的問題的終極解決方案,本來一開始在搜尋引擎上就看到了它的蹤跡,但因天朝的網路環境問題,zi

Android:Activity 與 Fragment 通訊 (99%) 完美解決方案

前言 最近一直在想著能否有一種更好的方案來解決:Android中Activity與Fragment之間通訊的問題,什麼叫更好呢,就是能讓Fragment的複用性高,效能還有好(不用反射),程式碼還要好維護,不需要為每對Activity和Fragment之間定義介面而發愁。

Android 4.4 前後版本讀取相簿圖片和拍照完美解決方案-獲取檔案路徑

4.3或以下,選了圖片之後,根據Uri來做處理,很多帖子都有了,我就不詳細說了.主要是4.4,如果使用上面pick的原生方法來選圖,返回的uri還是正常的,但如果用ACTION_GET_CONTENT的方法,返回的uri跟4.3是完全不一樣的,4.3返回的是

Android漢字轉拼音的完美解決方案

前面的話:做一件事情前一定要先對比多種解決方案在開始寫程式碼,如果一開始就知道某種方法的不合理,就不會浪費那麼多時間在解決之前的錯誤上啦。這篇文章就是因為一開始沒有認識到這個問題,付出的代價。以此為戒! 一開始,我使用ASCII碼和拼音的對映對漢字和拼音間

Android 4.4前後版本讀取相簿圖片和拍照完美解決方案

4.3或以下,選了圖片之後,根據Uri來做處理,很多帖子都有了,我就不詳細說了.主要是4.4,如果使用上面pick的原生方法來選圖,返回的uri還是正常的,但如果用ACTION_GET_CONTENT的方法,返回的uri跟4.3是完全不一樣的,4.3返回的是帶檔案路徑的,而

Android訊息推送完美解決方案

1.推送方式基礎知識:   在移動網際網路時代以前的手機,如果有事情發生需要通知使用者,則會有一個視窗彈出,將告訴使用者正在發生什麼事情。可能是未接電話的提示,日曆的提醒,或是一封新的彩信。推送功能最早是被用於Email中,用來提示我們新的資訊。由於時代的發展和移動網際網

spring-boot 使用 main函數 無法啟動的問題完美 解決方案

logs aid maven spring use ring ng- main函數 host   首先 是啟動之後 ,直接回exit code 0,網址 裏面輸入localhost:8080顯示站點未啟動。網上查 了多種 方式 ,日誌 也 打了,都沒發現問題,最後到這篇文

rem手機端頁面自適應完美解決方案(最新)

有效 load rem tex width meta sel setattr name <!DOCTYPE html> <html> <head> <meta charset="UTF-8">

DevExpress控件cxGrid實現多列模糊匹配輸入的完美解決方案

change chang pro 檢索 res ble tableview 封裝 完美解決 本方案不需要修改控件源碼,是完美解決cxgrid或TcxDBExtLookupComboBox支持多列模糊匹配快速輸入的最佳方案!! 小哥摸索多日,終於搞定cxgrid和TcxDBE

「部署日記」Android Studio亂碼解決方案

安裝 roi 技術分享 set fff setting 電腦 span conf 弄了一臺新電腦,第一件事肯定是弄好打造臺啦 於是VS、AS、CRD、NSIS、Adobe全家桶全安裝完畢, 問題來了,在打開Android Studio時,出現亂碼,比如 這樣的: 這樣的:

[轉載]java讀寫word文檔,完美解決方案

重點 app PE 列表 mage too 介紹 代碼 而且 做項目的過程中,經常需要把數據裏裏的數據讀出來,經過加工,以word格式輸出。 在網上找了很多解決方案都不太理想,偶爾發現了PageOffice,一個國產的Office插件,開發調用非常簡單!比網上介紹的poi,