http请求,使用GZIP,但是不成功,急求各位~~!!

zhl1015 2012-05-21 11:03:02
不用GZIP,一点问题都没有,使用GZIP就出问题,描述如下:
点击按钮发送数据到服务端,然后接收服务端返回的数据
点击按钮,每隔一次接收服务端的数据失败,一次成功一次失败,非常郁闷!搞了一天了,请求帮助啊~~

Android端代码:
	public static String send(String url, String content, String contentType) throws Exception {
//建立连接
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
if (contentType != null) {
conn.setRequestProperty("content-type", contentType);
} else {
conn.setRequestProperty("content-type", CONTENT_TYPE_HTML);
}
conn.setConnectTimeout(10000);
conn.setReadTimeout(60000);
conn.setRequestMethod("POST");
conn.connect();

//发送数据
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new GZIPOutputStream(conn.getOutputStream()), "GBK"));
bw.write(content);
bw.flush();
bw.close();


//接收返回数据
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(new GZIPInputStream(conn.getInputStream()), "GBK"));
String str = null;
while ((str = br.readLine()) != null) {
sb.append(str);
}
br.close();

conn.disconnect();
return sb.toString();
}


服务端代码:
	/**
* 接收HTTP数据
* @param request
* @param response
* @return 数据
*/
public static String receive(HttpServletRequest request) {
StringBuffer sb = new StringBuffer();
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(new GZIPInputStream(request.getInputStream()), "GBK"));
String str = null;
while ((str = br.readLine()) != null) {
sb.append(str);
}
br.close();

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (br!=null) br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}

/**
* 响应HTTP数据
* @param responseText
* @param response
*/
public static void response(String responseText, HttpServletResponse response) {
BufferedWriter bw = null;
try {
response.setHeader("Content-Encoding", "gzip");
bw = new BufferedWriter(new OutputStreamWriter(new GZIPOutputStream(response.getOutputStream()), "GBK"));
bw.write(responseText);
bw.flush();
bw.close();

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (bw!=null) bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}


这两个是我写的工具类,各位好心可以试一下,Android建个按钮就行,服务端建个Servlet就行。

就这么点分了,感谢各位!!!
...全文
465 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
乌托邦长空 2013-09-25
  • 打赏
  • 举报
回复
换上也不好使,哎
fire_fire_fire 2012-05-22
  • 打赏
  • 举报
回复
貌似JDK的GZIP本身就有问题,你看看这篇文章对你有用吗:http://cin-ie.iteye.com/blog/859822
zhl1015 2012-05-22
  • 打赏
  • 举报
回复
真就是这么回事,换上就好使
zhl1015 2012-05-22
  • 打赏
  • 举报
回复
回2楼,今天试下,看看成不
zhl1015 2012-05-21
  • 打赏
  • 举报
回复
对了,异常是:java.io.IOException: Unknown format
在Android端的:
BufferedReader br = new BufferedReader(new InputStreamReader(new GZIPInputStream(conn.getInputStream()), "GBK"));

抛出来的
Re: 《文件备份与压缩命令》 ---------------------------------------内容提要: 1/6)tar   命令:打包备份/解压打包(将文件或目录的压缩或不解压查看查看)2/6)gzip  命令:压缩或解压文件3/6)zip   命令:打包和压缩文件4/6)unzip 命令:解压zip文件5/6)scp   命令:远程文件复制(全量备份)6/6)rsync 命令:文件同步工具(增量备份)  本人在教学和实战过程中发现,即便是有一定运维经验的人,可能已经能够搭建一定复杂度的Linux架构,但是在来来回回的具体操作中,还是体现出CLI(命令界面)功底不够扎实,甚至操作的非常‘拙’、处处露‘怯’。 对一个士兵来说,枪就是他的武器,对于一个程序员来说,各种library(工具库)就是他的武器;而对于Linux运维人员来说,无疑命令行工具CLI(命令界面)就是他们的武器;高手和小白之间的差距往往就体现在对于这些“武器”的掌握和熟练程度上。有时候一个参数就能够解决的事情,小白们可能要写一个复杂的Shell脚本才能搞定,这就是对CLI(命令界面)没有理解参悟透彻导致。 研磨每一个命令就是擦拭手中的作战武器,平时不保养不理解,等到作战的时候,一定不能够将手中的武器发挥到最好,所以我们要平心、静气和专注,甘坐冷板凳一段时间,才能练就一身非凡的内功! 本教程从实战出发,结合当下流行或最新的Linux(v6/7/8 版本)同时演示,将命令行结合到解决企业实战问题中来,体现出教学注重实战的务实精神,希望从事或未来从事运维的同学,能够认真仔细的学完Linux核心命令的整套课程。 本课程系列将逐步推出,看看我教学的进度和您学习的步伐,孰占鳌头! 注:关于教学环境搭建,可以参考本人其它课程系列,本教学中就不再赘述! 《参透 VMware 桌面级虚拟化》 《在虚拟机中安装模版机(包括应用软件等)》 《SecureCRT 连接 GNS3/Linux 的安全精密工具》

80,347

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧