面对从http请求的字节数组转换原始数据的性能问题

时间:2015-11-07 17:02:35

标签: java performance httprequest cpu-usage

我们正在使用以下代码从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

1 个答案:

答案 0 :(得分:2)

以下是代码的一些问题:

  1. byte[] streamBytes = new byte[1];此缓冲区太小,请使用类似4096的内容。

  2. 您没有关闭流,这可能会导致资源泄漏。

  3. stream.read(streamBytes,0,1)您正在阅读每个循环执行一次byte,这会导致效果不佳。

  4. 使用length变量是多余的,你可以做stream.read(streamBytes,0,1) != -1