我们正在使用以下代码从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
答案 0 :(得分:2)
以下是代码的一些问题:
byte[] streamBytes = new byte[1];
此缓冲区太小,请使用类似4096的内容。
您没有关闭流,这可能会导致资源泄漏。
stream.read(streamBytes,0,1)
您正在阅读每个循环执行一次byte
,这会导致效果不佳。
使用length
变量是多余的,你可以做stream.read(streamBytes,0,1) != -1