【问题标题】:Java read/write BufferedImage performance from file vs memoryJava 从文件与内存读取/写入 BufferedImage 性能
【发布时间】:2019-05-25 11:15:22
【问题描述】:

我有一个 http 客户端,它获取一个包含 png 图像字符串的 json 响应,然后我会旋转该字符串。

一切都按预期工作,但我很想知道为什么(方法 1)在旋转之前将 http 响应图像作为 BufferedImage 保存在内存中,说 BufferdImage 比(方法 2)将 http 响应图像保存到文件然后读取慢在旋转相同的 BufferedImage 之前将该文件转换为 BufferedImage?

这与我们都知道在内存中进行类似的读/写操作比文件 i/o 更快的做法相反。我运行 java 的笔记本电脑有充足的内存和磁盘空间。

////////////METHOD 1 - WRITE/READ IMAGE FROM MEMORY
log.info("START TEST1 " + new Timestamp(System.currentTimeMillis()));
OutputStream outputStream = null;
byte[] imageByteArray = 
    Base64.decodeBase64(jsonObj.getString("LabelImages"));

//Convert byte array back to BufferedImage
InputStream in = new ByteArrayInputStream(imageByteArray);
BufferedImage img = ImageIO.read(in);

BufferedImage rotatedImg = rotate(img, 90);
File outputfile = new File("/var/opt/DI/tmp/rotatedlabel" + orderId + ".png");
ImageIO.write(rotatedImg, "png", outputfile);
log.info("END TEST1 " + new Timestamp(System.currentTimeMillis()));

////////////METHOD 2 - WRITE/READ IMAGE FROM FILE
log.info("START TEST2 " + new Timestamp(System.currentTimeMillis()));
writeImageStringToFile(jsonObj.getString("LabelImages"), orderId);
BufferedImage rotatedImg2 = rotate(ImageIO.read(new 
File("/var/opt/DI/tmp/label" + orderId + ".png")), 90);
File outputfile2 = new 
File("/var/opt/openbravo/bluecrest/DI/tmp/rotatedlabel" + orderId + ".png");
ImageIO.write(rotatedImg2, "png", outputfile2);
log.info("END TEST2 " + new Timestamp(System.currentTimeMillis()));

METHOD 2 is about 10% faster than METHOD 1.

【问题讨论】:

    标签: java image


    【解决方案1】:

    您需要告诉我们您是如何进行性能测试的。如果您按照此处编写的方式进行操作(在同一程序中调用方法 1,然后调用方法 2),我的猜测是这是由于 JIT 在方法 1 期间优化了旋转方法,并在方法 2 期间享受了这种优化,以至于它克服了磁盘操作。

    就我个人而言,当我做性能比较测试时,我会在一个程序中运行 method1 10 次,消除两三个最差的结果,然后在单独的程序中对 method2 执行相同的操作。这通常会给 JIT 足够的时间来启动并提供更有意义的数字..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      相关资源
      最近更新 更多