HttpClient接收数据的问题

Posted on

HttpClient接收数据的问题

没有的专栏

背景: 竞价大厅和支持系统进行项目的部署和竞价数据回调时,涉及到了传输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个字节。

发表于 @ 2005年10月31日 15:28:00

希望本站内容对您有点用处,有什么疑问或建议请在后面留言评论
转载请注明作者(RobinChia)和出处 It so life ,请勿用于任何商业用途