HttpClient接收数据的问题
来源:互联网 发布:淘宝换货运费险有用吗 编辑:程序博客网 时间:2024/06/05 19:42
背景:
竞价大厅和支持系统进行项目的部署和竞价数据回调时,涉及到了传输XML文件。
发送端采用的是HttpClient技术,将XML格式的String作为Http的Body发送。
原先的做法:
接收端通过Jsp的request对象的getInputStream()方法获取输入流,然后用read()方法,将输入流按照byte读取,存入byte[],然后还原成对应编码的String,并进行解析。
大厅升级时,遇到的问题:
由于涉及多产品,发送端的数据量大大增加。如果发现String长度如果超过4K多,就会报告XML解析报错。
逐一调试分析,发现错误的核心是inputstream.read()方法,该方法只接收到了4096个byte。
使用inputstream.read(byte[], int off, int len )方法指定长度也不行,还是只读4096个字节。
解决:
增加一个缓冲,采用BufferedReader读取inputstream,然后针对BufferedReader逐行读取,则接收完全正常。
原因分析:
没发现inputStream读取有长度限制;写了个读file的Demo测试inputStream的read方法,再次确定不存在长度的问题。
对inputStream作2次read(),发现第二次是从第4097个字节开始往下读,看来问题和缓冲相关。
翻翻HttpClient的源代码,基本确定原因是:HttpClient的传输协议是对Socket进行了封装,而默认Socket的缓冲大小4096。Socket缓冲满了就flush,发送给客户端,那么如果接收端没有用缓冲接收,一次最大只能解收到4096个字节。
- HttpClient接收数据的问题
- HttpClient接收数据的问题
- org.apache.commons.httpclient.HttpClient 设置数据接收超时
- 于完成端口的数据接收问题
- 套接字接收数据的问题
- erlang异步接收不到数据的问题
- AFnetworking接收数据可变的问题!
- PHPStrom _POST不能接收数据的问题
- qt TCP接收数据遇到的问题
- spring mvc 服务端接收httpclient post 参数无法接收问题
- httpclient使用post方式发送json数据,以及服务端的接收
- Mscomm接收数据问题
- Lua数据接收问题
- 使用HttpClient的post提交数据遇到的问题
- Android Socket 发送与接收数据问题: 发送后的数据接收到总是粘包
- Android Socket 发送与接收数据问题: 发送后的数据接收到总是粘包
- Android Socket 发送与接收数据问题: 发送后的数据接收到总是粘包
- httpClient采集到的数据乱码问题完整解决
- 堆,栈,数组
- Thinking in AJAX(一) —— AJAX - X
- 佛祖说出的爱情箴言【转载】
- 两台Mysql数据库数据同步实现
- 编程的重在组织语言
- HttpClient接收数据的问题
- 为DataGrid创建自定义列控件(二)
- 为DataGrid创建自定义列控件(三)
- 一次使用临时表优化数据处理的过程
- 最新恶意广告IS_0518(_IS_ISC.DLL)的删除方法
- 2005.10.31
- Java新手入门的30个基本概念(转载)
- TreeView相关
- 数据库:DAO和ADO,Access和MSSQL等