当前位置: 首页 > 面试题库 >

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

堵睿范
2023-03-14
问题内容

我正在使用此示例中的代码从发送一个JSONObject到我的Web服务器。在这里复制代码Android client

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在将其发送到服务器之前对其进行最佳压缩,以及如何在服务器(我正在使用Java Servlets)上对其进行解压缩?


问题答案:

根据此http://android-developers.blogspot.com/2011/09/androids-http-
clients.html
如果您使用的是Gingerbread或更高版本,则HttpURLConnection会自动添加gzip压缩:

在Gingerbread中,我们添加了透明响应压缩。HttpURLConnection将自动将此标头添加到传出请求中,并处理相应的响应:

接受编码:gzip

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

编辑:
使用Java Servlet提供压缩的内容 “使用Java Servlet服务压缩的内容”)

编辑2:
使用DefaultHttpClient进行Gzip压缩使用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:
这是另一个关于Java的HTTPClient的内容gzipPOST请求的gzip。您需要在发布数据之前手动gzip压缩数据,因为正常的http /gzip操作是服务器将gzip压缩的内容发送到客户端



 类似资料:
  • 问题内容: 我是Android的新手,所以关于android的知识还不是很多,好的,请讲到重点,我需要通过用户名和密码进行 登录 ,因为我必须通过JSON进行http requset并返回响应也将以JSON格式提供。所以任何人都可以帮助我。谢谢。 问题答案: 试试这个代码

  • 我使用LZMA SDK在Windows7(64位)下进行文件压缩/解压缩(LZMA是7-zip中使用的默认算法)。 sdk可以在这里找到(源代码)http://7-zip.org/sdk.html 以加快闪烁过程。我想做增量压缩来分离文件,以获得更小的大小。然而,我想用增量解压缩来解压缩文件,这样第一部分被解压缩,而其他部分来自can总线。 所以在MCU部分,我想要能够一个部分一个部分的解压和闪存

  • 问题内容: TL; DR; 上传之前,有没有一种方法可以直接在浏览器端压缩图像(主要是jpeg,png和gif)?我很确定JavaScript可以做到这一点,但是我找不到实现它的方法。 这是我要实现的完整方案: 用户访问我的网站,然后通过元素选择图片, 该图片是通过JavaScript检索的,我们进行了一些验证,例如正确的文件格式,最大文件大小等, 如果一切正常,则会在页面上显示图像的预览, 用户

  • 我用C#在屏幕外生成一堆SSRS报告,然后把每个报告的图像粘贴到一个PowerPoint演示文稿中,有效地将所有报告整理成一个包。虽然这样做很好,但对于一个26页的演示文稿,它的文件大小只有23mb。(我明白,使用高dpi在一定程度上导致了这个巨大的数字,但事实证明,这是创建所需清晰度的图像所必需的)。 但是,当我将此演示文稿手动保存在PowerPoint中时,文件大小会减小到大约13mb。(这是

  • 我正试图用Java编写一个程序来解压大型机中PKZIP工具压缩的文件。然而,我试过以下三种方法,它们都不能解决我的问题。 > by exe. 我试图通过WinRAR、7Zip和Linux命令(解压)打开它。全部失败,错误信息如下: 档案不是格式未知就是损坏了 通过jdkapi-java。util。拉链 正如这个网站所描述的,我还尝试用JDKAPI解压它。但是,它失败并显示错误消息: IO错误:ja

  • 问题内容: 任何人都可以向我展示在我一直在搜索的Java中压缩和解压缩tar.gzip文件的正确方法,但是我能找到的最多是zip或gzip(单独)。 问题答案: 我最喜欢的是plexus-archiver-请参阅GitHub上的资源。 另一个选项是Apache commons- compress- (请参阅mvnrepository)。 使用plexus-utils,用于取消存档的代码如下所示: