我從我的.net Web服務中獲取壓縮的字符串。在日食中,我想解壓縮刺。減少日食中的字符串
壓縮在Web服務中的字符串:
resultJsonString = new AsyncGetProductIdResults().execute(link).get();
String temp = unZip(resultJsonString);
異步:
class AsyncGetProductIdResults extends AsyncTask<String, Void, String>
{
@SuppressWarnings("null")
@Override
protected String doInBackground(String... params)
{
String url = params[0];
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpPost = new HttpGet(url);
try
{
HttpResponse response = httpClient.execute(httpPost);
return EntityUtils.toString(response.getEntity());
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String idResult)
{
if (idResult == null)
public static byte[] ZipStr(string str)
{
{
return;
}
}
}
解壓縮的android:
Android中使用異步public static string Compress(string text)
{
byte[] buffer = Encoding.UTF8.GetBytes(text);
MemoryStream ms = new MemoryStream();
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
{
zip.Write(buffer, 0, buffer.Length);
}
ms.Position = 0;
MemoryStream outStream = new MemoryStream();
byte[] compressed = new byte[ms.Length];
ms.Read(compressed, 0, compressed.Length);
byte[] gzBuffer = new byte[compressed.Length + 4];
System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
return Convert.ToBase64String(gzBuffer);
}
Web服務響應
的logcat:
01-08 11:07:59.016: E/AndroidRuntime(1327): FATAL EXCEPTION: main
01-08 11:07:59.016: E/AndroidRuntime(1327): java.lang.IllegalStateException: Could not execute method of the activity
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.view.View$1.onClick(View.java:3591)
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.view.View.performClick(View.java:4084)
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.view.View$PerformClick.run(View.java:16966)
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.os.Handler.handleCallback(Handler.java:615)
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.os.Handler.dispatchMessage(Handler.java:92)
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.os.Looper.loop(Looper.java:137)
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-08 11:07:59.016: E/AndroidRuntime(1327): at java.lang.reflect.Method.invokeNative(Native Method)
01-08 11:07:59.016: E/AndroidRuntime(1327): at java.lang.reflect.Method.invoke(Method.java:511)
01-08 11:07:59.016: E/AndroidRuntime(1327): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-08 11:07:59.016: E/AndroidRuntime(1327): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-08 11:07:59.016: E/AndroidRuntime(1327): at dalvik.system.NativeStart.main(Native Method)
01-08 11:07:59.016: E/AndroidRuntime(1327): Caused by: java.lang.reflect.InvocationTargetException
01-08 11:07:59.016: E/AndroidRuntime(1327): at java.lang.reflect.Method.invokeNative(Native Method)
01-08 11:07:59.016: E/AndroidRuntime(1327): at java.lang.reflect.Method.invoke(Method.java:511)
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.view.View$1.onClick(View.java:3586)
01-08 11:07:59.016: E/AndroidRuntime(1327): ... 11 more
01-08 11:07:59.016: E/AndroidRuntime(1327): Caused by: java.util.zip.DataFormatException: data error
01-08 11:07:59.016: E/AndroidRuntime(1327): at java.util.zip.Inflater.inflateImpl(Native Method)
01-08 11:07:59.016: E/AndroidRuntime(1327): at java.util.zip.Inflater.inflate(Inflater.java:228)
01-08 11:07:59.016: E/AndroidRuntime(1327): at java.util.zip.Inflater.inflate(Inflater.java:205)
01-08 11:07:59.016: E/AndroidRuntime(1327): at com.example.testp.SecondActivity.unZip(SecondActivity.java:184)
01-08 11:07:59.016: E/AndroidRuntime(1327): at com.example.testp.SecondActivity.JSONDataSync(SecondActivity.java:83)
01-08 11:07:59.016: E/AndroidRuntime(1327): ... 14 more
之前,我開始實施壓縮和解壓我的Web服務和響應工作。任何幫助將不勝感激。即使你能指出我的材料,我也可以閱讀。
編輯1
申請後在Android中https://stackoverflow.com/a/21016711/1587302
public static byte[] ZipStr(string str)
{
using (MemoryStream output = new MemoryStream())
{
using (DeflateStream gzip =
new DeflateStream(output, CompressionMode.Compress))
{
using (StreamWriter writer =
new StreamWriter(gzip, System.Text.Encoding.UTF8))
{
writer.Write(str);
}
}
return output.ToArray();
}
}
的AsyncTask提出的修改:
class AsyncGetProductIdResultsBytes extends AsyncTask<String, Void, byte[]>
{
@SuppressWarnings("null")
@Override
protected byte[] doInBackground(String... params)
{
String url = params[0];
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpPost = new HttpGet(url);
try
{
HttpResponse response = httpClient.execute(httpPost);
return EntityUtils.toByteArray(response.getEntity());
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(byte[] idResult)
{
if (idResult == null)
{
return;
}
}
}
解壓縮安卓還在忙着減壓。
內容字節的[]上壓縮之後web服務側:[1,97,0,0,31,139,...]
內容字節[]上減壓之前機器人側的:[123,34,103,101,116, 65,...]
只是想知道如果即時通訊在Web服務端進行壓縮嗎?當它在android端收到時byte []的內容是否應該改變?
好,可能存在與字節序的一個問題:如果你在Java中讀取前四個字節的數據比C#一樣的嗎? – Narkha
從web服務被壓縮的字符串:{ 「getAllProjectsByIDResult」: 「+ AWEAAB ++ LCAAAAAAABADsvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee 997o7nU4n99」} – user3074196
Eclipse中的接收到的字符串{ 「getAllProjectsByIDResult」: 「+ AWEAAB ++ LCAAAAAAABADsvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee 997o7nU4n99」} – user3074196