RandomAccessBuffer的性能改进

时间:2014-08-14 16:29:25

标签: java performance algorithm optimization profiling

我使用pdf库将PDF转换为图像。这个过程需要很多时间,我花了profiler来找到问题的原因,并且一切都降低了(> 60%的CPU时间)。现在我的问题是:

这种方法可以进一步改进吗?

public int read(byte[] b) throws IOException {

    if (buf==null) throw new IOException("Data buffer not initialized.");

    if (pointer<0 || pointer>=length)
        return -1;

    int length=this.length-(int)pointer;
    if(length>b.length)
            length=b.length;

    for (int i=0; i<length; i++) {
        buf.seek(pointer++);
        b[i] = buf.readByte();
    }
    return length;
}

1 个答案:

答案 0 :(得分:5)

您在循环中一次读取一个字节(以及执行无用的seek())。这不聪明,因为read(byte[] b)中也有RandomAccessFile方法。

更改此

for (int i=0; i<length; i++) {
    buf.seek(pointer++);
    b[i] = buf.readByte();
}

buf.seek(pointer);
buf.read(b);
pointer += b.length;