代码之家  ›  专栏  ›  技术社区  ›  seba123neo

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

  •  3
  • seba123neo  · 技术社区  · 15 年前

    1-来自Web服务。NET 2008(vb)中,我有一个返回字节数组的方法,字节数组实际上是一个字符串“Hola Mundo”(“Hello World”,英文)用System.IO.Compression GZipStream类压缩。

    2-该方法返回压缩的字符串“Hola Mundo”,这就是webservice返回的内容:

    <base64Binary>
    H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Ir5dlVn6xXo5q/4f0m5DIgoAAAA=
    </base64Binary>
    

    3-如果我从Visual Basic的windows应用程序中进行测试。NET来运行这个方法返回这个字符串并用另一个函数解压,它给我带来了“Hola Mundo”。。。。

    4-在Android(Eclipse)上,我成功地发出了请求,并给我带来了前一个字符串。。。但不知道如何减压和显示我“荷拉蒙多”。。。

    5-我试过网上的几个代码,但都没用。

    有人知道这件事吗?从现在起非常感谢你。

    问候语。

    4 回复  |  直到 15 年前
        1
  •  3
  •   Jon Skeet    15 年前

    如果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();
    }
    
        2
  •  1
  •   Marc Gravell    15 年前

    我不能评论Android,但你只需要:

    • 倒过来-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
    }
    
        3
  •  1
  •   Eliseo    15 年前

    Android中没有包外的base-64转换。我使用了Bouncy Castle Java密码库中的一个。 Bouncy Castle

    你也可以在ksoap2 android库中找到它们。

        4
  •  1
  •   Adam Smith    15 年前

    为了扩展Eli的post,ksoap2 android有byte[]org.kobjects.base64.base64.decode(字符串arg0)

    你可以在这里得到它: http://code.google.com/p/ksoap2-android/wiki/HowToUse?tm=2