Сжатый массив байтов Java из .NET Webservice - PullRequest
3 голосов
/ 24 ноября 2010

1 - из веб-сервиса.NET 2008 (vb), у меня есть метод, который возвращает массив байтов, массив байтов на самом деле представляет собой строку «Hola Mundo» («Hello World» на английском языке), сжатую с помощью класса System.IO.Compression GZipStream.

2 - Метод возвращает сжатую строку «Hola Mundo», и веб-служба возвращает следующее:

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

3 - если я выполняю тест из приложения Windows из Visual Basic.NET для запуска этого метода возвращает мне эту строку и распаковать с другой функцией, которая у меня есть, она приносит мне "Hola Mundo" ....

4 - на Android (Eclipse), и мне удалось сделать запрос ипринесите мне предыдущую строку ... но не знаете, как распаковать и показать мне "Hola Mundo" ...

5 - я пробовал несколько кодов из Интернета, но ни один не работает.

кто-нибудь что-нибудь знает об этом?большое спасибо с этого момента.

Привет.

Ответы [ 4 ]

3 голосов
/ 24 ноября 2010

Если 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 голос
/ 19 января 2011

Чтобы развернуть пост Элая, у ksoap2-android есть байт [] org.kobjects.base64.Base64.decode (String arg0)

Вы можете получить его здесь: http://code.google.com/p/ksoap2-android/wiki/HowToUse?tm=2

1 голос
/ 24 ноября 2010

В Android нет пакета base-64, доступного из пакета.Я использовал один из доступных в криптографической библиотеке Java Bouncy Castle. Надувной замок

Также вы можете найти их в библиотеке ksoap2-android.

1 голос
/ 24 ноября 2010

Я не могу комментировать 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...