2012-02-24 158 views
3

根據Javadoc,android.util.Base64.decode()有兩個參數:文本和「標誌」。這些標誌是INT形式和(我引述):android.util.Base64編碼/解碼標誌參數

flags controls certain features of the decoded output. Pass DEFAULT to decode standard Base64.

首先,感謝給誰就給誰決定寫一個模糊的Javadoc。我看到Base64有一些枚舉字符串,實際上,我們一直使用Base64.NO_WRAP作爲我們的標誌。然而,在這個特定的實例中,我們需要使用兩個標誌:NO_WRAP和URL_SAFE。

我們如何指定兩個標誌?我們嘗試用管道('|')將它們分開,並且沒有這樣做。

import android.util.Base64; 
public class Foo { 
    public static void main(String[] args) { 
     String urlSafeBase64EncodedString = getUrlSafeBase64EncodedString(); 
     int flags = ????????; //Need both Base64.NO_WRAP and Base64.URL_SAFE 
     String decodedString = Base64.decode(urlSafeBase64EncodedString, flags); 
    } 
} 

謝謝你的時間。

+0

「那沒有做到」 - 那它做了什麼? (你究竟寫了些什麼*)如果你要抱怨其他人含糊不清,它有助於確保你自己:) – 2012-02-24 18:33:35

+0

它沒有做任何事情。它無法解碼Base64字符串。我已經說過了,我用管道符號分隔了兩個標誌......那怎麼不完全清楚? – 2012-02-24 18:38:02

+0

完全有可能您的語法錯誤,例如「Base64.NO_WRAP | URL_SAFE」。那當然會產生彙編錯誤......這也會被「沒有這樣做」所涵蓋。現在「它沒有做任何事情」和「它無法解碼Base64字符串」並不完全相同。 *它是如何解碼失敗的?有沒有例外,它是否給出了空洞的結果,它掛了嗎? – 2012-02-24 18:42:34

回答

17

傳遞給函數的int標誌通常被定義爲按位「或」來實現組合效果。

您通常可以通過查看常量值告訴,他們會去0 1 2 4 8 16 ..

至於你的問題,你可以使用你的標誌定義如下:

int flags = Base64.NO_WRAP | Base64.URL_SAFE; 
+0

我將不得不寫一封非常嚴肅的信給我的CS教授,因爲從來沒有說清楚。稍後將把這些文件歸檔。工作很棒!謝謝! – 2012-04-10 17:16:34