如何压缩JSONObject在Android中通过Http发送它?

我使用 this example中的代码从Android客户端向我的Web服务器发送JSONObject.在此处重现代码
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.httpconnectionParams;
import org.apache.http.params.HttpParams;

int TIMEOUT_MILLISEC = 10000;  // = 10 seconds
HttpParams httpParams = new BasicHttpParams();
httpconnectionParams.setConnectionTimeout(httpParams,TIMEOUT_MILLISEC);
httpconnectionParams.setSoTimeout(httpParams,TIMEOUT_MILLISEC);
HttpClient client = new DefaultHttpClient(httpParams);

HttpPost request = new HttpPost(serverUrl);
request.setEntity(new ByteArrayEntity(
    postMessage.toString().getBytes("UTF8")));
HttpResponse response = client.execute(request);

我的问题

如何在将JSONObject发送到服务器之前对JSONObject进行最佳压缩以及如何在服务器上解压缩它(我正在使用Java Servlets)?

根据这个 http://android-developers.blogspot.com/2011/09/androids-http-clients.html如果你使用姜饼或以后HttpURLConnection自动添加gzip压缩:

In Gingerbread,we added transparent response compression.
HttpURLConnection will automatically add this header to outgoing
requests,and handle the corresponding response:

Accept-Encoding: gzip

然后,您的网络服务器需要处理gzip压缩.

编辑:
Serve Gzipped content with Java Servlets

编辑2:
使用DefaultHttpClient Enabling GZip compression with HttpClient进行Gzip压缩

private static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding";
private static final String ENCODING_GZIP = "gzip";

final DefaultHttpClient client = new DefaultHttpClient(manager,parameters);

client.addRequestInterceptor(new HttpRequestInterceptor() {
  public void process(HttpRequest request,HttpContext context) {
    // Add header to accept gzip content
    if (!request.containsHeader(HEADER_ACCEPT_ENCODING)) {
      request.addHeader(HEADER_ACCEPT_ENCODING,ENCODING_GZIP);
    }
  }
});

client.addResponseInterceptor(new HttpResponseInterceptor() {
  public void process(HttpResponse response,HttpContext context) {
    // Inflate any responses compressed with gzip
    final httpentity entity = response.getEntity();
    final Header encoding = entity.getContentEncoding();
    if (encoding != null) {
      for (HeaderElement element : encoding.getElements()) {
        if (element.getName().equalsIgnoreCase(ENCODING_GZIP)) {
          response.setEntity(new InflatingEntity(response.getEntity()));
          break;
        }
      }
    }
  }
});

编辑3:
这是关于邮件内容GZip POST request with HTTPClient in Java的gzip的另一个Stackoverflow问题.您需要在发布之前手动gzip数据,因为正常的http / gzip操作是将gzip压缩内容发送到客户端的服务器.

相关文章

AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...