Java 如何缩短向远程服务器发送数据的时间?

Java 如何缩短向远程服务器发送数据的时间?,java,android,http,Java,Android,Http,例如,我的平板电脑中存储了10MB的数据。数据具有列表结构。列表中的每个条目约为3500字节 目前,我每次发送一条带有以下代码的条目: HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(ipport+ phpHandler); HttpResponse response = null; try { httppost.setEntity

例如,我的平板电脑中存储了10MB的数据。数据具有列表结构。列表中的每个条目约为3500字节

目前,我每次发送一条带有以下代码的条目:

    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(ipport+ phpHandler);
    HttpResponse response = null;

    try {
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));
        response = httpclient.execute(httppost);
    } catch (UnsupportedEncodingException e) {
    } catch (ClientProtocolException e) {
    } catch (IOException e) {
    }
但是要发送这个10MB的数据,需要很长时间。每次发送条目大约需要1秒的时间


有什么办法可以提高效率

您可以构建一个包含所有实体的JSON字符串对象,然后使用gzip或任何其他压缩方案对其进行压缩

构建JSON对象的好处是可以将所有对象作为一个请求传输,而不是单独发送。这将消除每次建立新连接的延迟

// your data list = listData
JSONArray newArray = new JSONArray();
for (int i = 0, lsize = listData.size(); i < lsize; i++) {
    try {
        newArray.put(i, listData.get(i));
    } catch (JSONException e) {
        e.printStackTrace();
    }
}
现在,您可以通过网络发送此JSON字符串,并且可以轻松地用任何服务器端语言反序列化JSON对象

至于Gzip压缩,您可能想看看这个

这里有一个关于在android中通过HTTP发送GZip压缩数据的问题

我同意@Ahmed的回答。最好使用jSON字符串对象,然后使用gzip库进行压缩

对于JSON,有很多有用的教程。下面的链接非常有用

在这里,您可以看到编写json的简单方法

public void writeJSON() {
  JSONObject object = new JSONObject();
  try {
    object.put("name", "Jack Hack");
    object.put("score", new Integer(200));
    object.put("current", new Double(152.32));
    object.put("nickname", "Hacker");
  } catch (JSONException e) {
    e.printStackTrace();
  }
} 
为了使用gzip进行压缩和解压缩,我在这里添加了一些来自答案的示例代码


压缩它,例如使用gzipsounds有趣!你能在这里显示一些代码吗?我不熟悉JSON以及如何从Java调用gzip。HTTP本机支持请求/响应体的gzip作为其规范的一部分。使用HTTP客户端,可以激活该功能,如中的文档示例所示。这种mecanism还允许全身流式传输,这可以减少通信的内存占用。本机mecanism还可以按照HTTP头内容和规范正确处理字符串到字节的转换,给定的示例可能无法做到这一点(如
String.getBytes
new String(byte[])
将依赖默认的JVM编码,而转换应根据HTTP头信息完成)。
public void writeJSON() {
  JSONObject object = new JSONObject();
  try {
    object.put("name", "Jack Hack");
    object.put("score", new Integer(200));
    object.put("current", new Double(152.32));
    object.put("nickname", "Hacker");
  } catch (JSONException e) {
    e.printStackTrace();
  }
} 
public static byte[] compress(String string) throws IOException {
    ByteArrayOutputStream os = new ByteArrayOutputStream(string.length());
    GZIPOutputStream gos = new GZIPOutputStream(os);
    gos.write(string.getBytes());
    gos.close();
    byte[] compressed = os.toByteArray();
    os.close();
    return compressed;
}

public static String decompress(byte[] compressed) throws IOException {
    final int BUFFER_SIZE = 32;
    ByteArrayInputStream is = new ByteArrayInputStream(compressed);
    GZIPInputStream gis = new GZIPInputStream(is, BUFFER_SIZE);
    StringBuilder string = new StringBuilder();
    byte[] data = new byte[BUFFER_SIZE];
    int bytesRead;
    while ((bytesRead = gis.read(data)) != -1) {
        string.append(new String(data, 0, bytesRead));
    }
    gis.close();
    is.close();
    return string.toString();
}