1 - 来自网络服务。 NET 2008(vb),我有一个返回字节数组的方法,字节数组实际上是一个用System.IO.Compression GZipStream类压缩的字符串“Hola Mundo”(英文“Hello World”)。
2 - 该方法返回压缩的字符串“Hola Mundo”,这就是webservice返回的内容:
<base64Binary>
H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Ir5dlVn6xXo5q/4f0m5DIgoAAAA=
</base64Binary>
3 - 如果我从Visual Basic的Windows应用程序进行测试。 NET运行这个方法返回给我这个字符串和Unzip与我有的另一个函数,它带给我“Hola Mundo”....
4 - 在Android(Eclipse)上我设法发出请求并带给我以前的字符串...但不知道如何解压缩并向我显示“Hola Mundo”......
5 - 我在网上尝试了几个代码,但都没有。
有人对此有所了解吗?非常感谢你。
问候。
答案 0 :(得分:3)
如果Android支持java.util.zip.GZIPInputStream
,那就是您想要的。
例如:
byte[] bytes = getBytesFromWebService();
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
GZIPInputStream gzip = new GZIPInputStream(bais);
try {
InputStreamReader reader = new InputStreamReader(gzip, "UTF-8");
try {
String firstLine = new BufferedReader(reader).readLine();
...
} finally {
reader.close();
}
} finally {
gzip.close();
}
答案 1 :(得分:1)
我无法评论Android,但您只需要:
在C#中,这将是:
string base64 = "H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Ir5dlVn6xXo5q/4f0m5DIgoAAAA=";
byte[] blob = Convert.FromBase64String(base64);
string orig;
using (var ms = new MemoryStream(blob))
using (var gzip = new GZipStream(ms, CompressionMode.Decompress))
using (var reader = new StreamReader(gzip))
{
orig = reader.ReadToEnd(); // Hola Mundo
}
答案 2 :(得分:1)
Android中没有可用的base-64转换功能。我使用了Bouncy Castle Java Cryptographic Library中提供的那个。 Bouncy Castle
你也可以在ksoap2-android库中找到它们。
答案 3 :(得分:1)
要扩展Eli的帖子,ksoap2-android有byte [] org.kobjects.base64.Base64.decode(String arg0)
您可以在此处获取:http://code.google.com/p/ksoap2-android/wiki/HowToUse?tm=2