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

来自.NET Webservice的Java压缩数组字节,java,.net,android,visual-studio-2008,eclipse,Java,.net,Android,Visual Studio 2008,Eclipse,1-来自Web服务。NET 2008(vb),我有一个方法返回一个字节数组,字节数组实际上是一个字符串“Hola Mundo”(“Hello World”在英语中)用System.IO.Compression GZipStream类压缩 2-该方法返回字符串“Hola Mundo”compressed,这是webservice返回的内容: <base64Binary> H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM

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

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

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

H4SIAAAAAAAAEAO29B2ACSZYLJI9TYNT/SvVK1+B0OQIAYBMK2JBAEOZBIM3MUWDAUJKASQPLVMVDZHZAZO2DVPFEE++999577733ujudTif33/8/XGZKAWZ2ZKRAYZ4HKRIHZ9+fB8/Ir5dlVn6xXo5q/4F0M5DIGOAAA=
3-如果我从Visual Basic的windows应用程序执行测试。NET来运行这个方法,返回这个字符串并用我拥有的另一个函数解压,它给我带来了“Hola Mundo”

4-在Android(Eclipse)上,我成功地提出了请求,并为我带来了前面的字符串。。。但不知道如何减压,给我看“Hola Mundo”

5-我试过网络上的几种代码,但都不管用

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


您好。

如果Android支持
java.util.zip.gzip输入流
,那就是您想要的

例如:

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();
}

我不能评论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
}

安卓系统中没有base-64转换软件包。我使用了Bouncy Castle Java加密库中的一个。


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

要在Eli的帖子中展开,ksoap2 android有字节[]org.kobjects.base64.base64.decode(字符串arg0)


您可以在这里找到它:

因此您将10个字符的字符串压缩为172个字符。整洁的嗨,Marc Gravell,这只是一个简单的例子,我实际上用它来压缩大约3MB的文本;pHi,您的代码在“gzip输入流gzip=new gzip输入流(bais);”java.io.IOException:未知”行上抛出错误format@seba123neo:那么这表明您没有正确检索字节数组。我建议您检查调试器中的字节。代码行“byte[]bytes=getBytesFromWebService();”已更改为“byte[]bytes=Result.GetBytes();”,其中变量“Result”包含字符串“H4SIAAAAAAAAEAO29B2ACSZYLJI9TYNT/SvVK1+B0OQIAYBMK2JBAEOZBIM3MUWDAUJKASQPLVMVDZHZAZO2DVPFEE++999577733ujudTif33/8/XGZKAWZ2ZKRAYZ4HKRIHZ9+fB8/Ir5dlVn6xXo5q/4F0M5DIGOAAA=@seba123neo:那是不对的,因为它是base64编码的。你需要先对数据进行base64解码。非常感谢Jon,问题解决了,我所做的是:1-用我在互联网上找到的一个类对字符串进行解码。2-链接非常快,不需要用gzip解压,类在检测到gzip时自动解压。。。有人知道比这更快的课程吗?大家好,谢谢你们抽出时间。是的,是的,这正是我需要的,但在android java代码中。