2012-02-24 156 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