Java 如何缩短向远程服务器发送数据的时间?
例如,我的平板电脑中存储了10MB的数据。数据具有列表结构。列表中的每个条目约为3500字节 目前,我每次发送一条带有以下代码的条目: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
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();
}