我使用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;
}
答案 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;