簡體   English   中英

Android Base64編碼

[英]Android Base64 encoding

public String encodeTobase64(Bitmap image){
    System.gc();  //For memory efficiency
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] b = baos.toByteArray();
    String imageEncoded = null;
     imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
    return imageEncoded;
}

我可以將字節數組拆分為多個部分,然后在不同的線程上對它們進行編碼,這樣對於較大的圖像來說可能很快,然后最后將它們加入。

如果你通過一次它實際上是可能的,如圖3的倍數處理您的字節這個職位

否則,由於Base64算法的工作方式而無法正常工作。 拆分數組時,每個段可能具有或多或少的填充,因此,當最后將String連接在一起並嘗試執行反向操作(返回byte[] )時,它很可能會失敗。

這是一個小例子:

String test = "This is a test";
byte[] testBytes = test.getBytes();
int mid = testBytes.length / 2;

byte[] part1 = Arrays.copyOfRange(testBytes, 0, mid);
byte[] part2 = Arrays.copyOfRange(testBytes, mid, testBytes.length);

Encoder base64Encoder = Base64.getEncoder();
System.out.println(base64Encoder.encodeToString(testBytes));
System.out.println(base64Encoder.encodeToString(part1));
System.out.println(base64Encoder.encodeToString(part2));

這將輸出:

VGhpcyBpcyBhIHRlc3Q=
VGhpcyBpcw==
IGEgdGVzdA==

請注意,如果將第二個兩個Strings放在一起,則它們不等於第一個。 =字符是填充。

如果您擔心使用Base64編碼圖像的效率,可以在單個后台線程上執行操作。 您可以使用AsyncTask作為一種選擇來幫助您做到這一點。

要部分編碼base64,首先需要了解base64編碼是如何工作的。 檢查下面的URL。

  1. http://www.hcidata.info/base64.htm

  2. https://blogs.oracle.com/rammenon/entry/base64_explained

例如在字符串的情況下。 您只需要將字符串數組划分為大小為3的數組,例如,如果要在base64中轉換“ 12345678aa”,則

按以下順序轉換

  1. 123-MTIz
  2. 456-NDU2
  3. 78a-Nzhh
  4. 一個-YQ ==

現在只合並您的結果。 它將變成“ MTIzNDU2NzhhYQ ==“。 這是“ 12345678aa”的編碼值。

Chears ................. :)

您忘記解碼位圖,然后再將其轉換為字節數組。

添加以下行

 Bitmap bm = BitmapFactory.decodeFile(image);

System.gc();  //For memory efficiency

因此,您的代碼將如下所示:

    public String encodeTobase64(Bitmap image){

    System.gc();  //For memory efficiency
    Bitmap bm = BitmapFactory.decodeFile(image);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    byte[] b = baos.toByteArray(); 
    String imageEncoded = null;
    imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
    return imageEncoded;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM