java - RandomAccessBuffer 的性能改进

标签 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;
}

最佳答案

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

改变这个

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

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

关于java - RandomAccessBuffer 的性能改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25313085/

相关文章:

java - 在创建 XMLGregorianCalendar 时使用 DataTypeFactory 严重影响性能

MySQL 查询中的项目数 “OR clause”

algorithm - 在 Perl 中确定范围重叠的最快方法

java - API 的问题输出为空。仅来自 intellij

java - DO-While 循环停止后再进行一次迭代吗?

mysql - 如何优化 MySQL 中的 sum

algorithm - 词比较算法

c - 如何从 C 数组中删除重复的字符串?

java - 非静态变量 this 不能从静态上下文 JFrame 中引用

java - Ubuntu 删除失败的 Java 安装(已安装一半)