我们使用下面的代码从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

10-05 18:19