我们使用下面的代码从http请求中提取原始数据,这花费了很长时间。在此期间,CPU利用率也会窥视。请求标头具有接近4000-5000个字符的XML。有什么方法可以重写下面的代码以节省时间和利用率?
private byte[] getRequestBytes(HttpServletRequest request) throws IOException {
byte[] requestBytes = null;
byte[] streamBytes = new byte[1];
InputStream stream = request.getInputStream();
int length = 0;
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
while((length = stream.read(streamBytes,0,1)) != -1) {
arrayOutputStream.write(streamBytes);
}
requestBytes = arrayOutputStream.toByteArray();
return requestBytes;
}
Java版本是1.7u45
最佳答案
这是代码的一些问题:byte[] streamBytes = new byte[1];
此缓冲区太小,使用4096之类的东西。
您没有关闭流,这可能会导致资源泄漏。stream.read(streamBytes,0,1)
您每次循环执行只能读取一个byte
,这会导致性能下降。
使用length
变量是多余的,您可以只执行stream.read(streamBytes,0,1) != -1