2010-11-24 2 views
3

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

2 - Метод возвращает строку "Hola Mundo" сжатый, и это то, что WebService возвращает:

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

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

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

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

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

Приветствия.

+3

Итак, вы сдавливают 10 символьных строк до 172 символов. Ухоженная! – 2010-11-24 11:30:58

+0

Привет, Марк Гравелл, это просто легкий пример, я на самом деле использую для сжатия около 3 МБ текста. – seba123neo 2010-11-24 11:38:19

+0

было немного вяло, я признаюсь, p – 2010-11-24 12:13:48

ответ

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

Я не могу комментировать 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 
} 
1

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

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

Смежные вопросы