来自.NET Webservice的压缩数组字节Java

时间:2010-11-24 11:24:54

标签: java .net android visual-studio-2008 eclipse

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 - 我在网上尝试了几个代码,但都没有。

有人对此有所了解吗?非常感谢你。

问候。

4 个答案:

答案 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,但您只需要:

  • 反转base-64
  • 反转gzip
  • 解码字符串(可能是UTF8)

在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