请求帮助:
我用发送一个异步(每次都是异步的)post 请求给 一个 Servlet ,用ServletInputStream 读出发送请求的数据。代码如下(发现读出的请求数据不完整现象——当请求的数据量大于4096个字节时,有几次大于4096个字节又可以,所以只能确定在数据量较大时读出数据是不完整的):
[code] private static String getRequestBody(HttpServletRequest request)
throws IOException, UnsupportedEncodingException {
final int BUFFER_SIZE = 8 * 1024;
byte[] buffer = new byte[BUFFER_SIZE];
ServletInputStream sis = request.getInputStream();
int length = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
do {
length = sis.read(buffer);
if (length > 0) {
baos.write(buffer, 0, length);
}
} while (length * 2 == BUFFER_SIZE);
String bodyData = new String(baos.toByteArray(), "UTF-8");
return bodyData;
}
[/code]
调式的时候发现有时候请求的数据量明显大于4096个字节,但do {} while( ) 却只执行一次。
发现是因为[color=red]length = sis.read(buffer);[/color]有时不是按照 buffer 的长度读出来的导致
length 的值不能与[color=red]length * 2 == BUFFER_SIZE[/color] 关系匹配上,导致do {} while( ) 只执行一次。
[color=red]length == BUFFER_SIZE[/color] 我也试过,do {} while( ) 也只执行一次。
我有时怀疑是客户端的发送请求是出问题了,但我在客户端检查并输出请求的数据时。发现数据总是完整的。发送时并无错误。
多谢了。。。。!!
我用发送一个异步(每次都是异步的)post 请求给 一个 Servlet ,用ServletInputStream 读出发送请求的数据。代码如下(发现读出的请求数据不完整现象——当请求的数据量大于4096个字节时,有几次大于4096个字节又可以,所以只能确定在数据量较大时读出数据是不完整的):
[code] private static String getRequestBody(HttpServletRequest request)
throws IOException, UnsupportedEncodingException {
final int BUFFER_SIZE = 8 * 1024;
byte[] buffer = new byte[BUFFER_SIZE];
ServletInputStream sis = request.getInputStream();
int length = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
do {
length = sis.read(buffer);
if (length > 0) {
baos.write(buffer, 0, length);
}
} while (length * 2 == BUFFER_SIZE);
String bodyData = new String(baos.toByteArray(), "UTF-8");
return bodyData;
}
[/code]
调式的时候发现有时候请求的数据量明显大于4096个字节,但do {} while( ) 却只执行一次。
发现是因为[color=red]length = sis.read(buffer);[/color]有时不是按照 buffer 的长度读出来的导致
length 的值不能与[color=red]length * 2 == BUFFER_SIZE[/color] 关系匹配上,导致do {} while( ) 只执行一次。
[color=red]length == BUFFER_SIZE[/color] 我也试过,do {} while( ) 也只执行一次。
我有时怀疑是客户端的发送请求是出问题了,但我在客户端检查并输出请求的数据时。发现数据总是完整的。发送时并无错误。
多谢了。。。。!!