来自.NET Webservice的Java压缩数组字节
1-来自Web服务。NET 2008(vb),我有一个方法返回一个字节数组,字节数组实际上是一个字符串“Hola Mundo”(“Hello World”在英语中)用System.IO.Compression GZipStream类压缩 2-该方法返回字符串“Hola Mundo”compressed,这是webservice返回的内容:来自.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
<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)
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代码中。