У меня есть клиент http, который получает ответ json, содержащий строку изображения png, которую я затем поворачиваю.
Все работает, как и ожидалось, но мне было любопытно узнать, почему (МЕТОД 1) сохранение изображения ответа http вПамять как BufferedImage перед вращением указанного BufferdImage медленнее, чем (МЕТОД 2) сохранение изображения ответа http в файл и затем чтение этого файла в BufferedImage перед вращением того же BufferedImage?
Это противоречит тому, что мы всезнать, что делать как для чтения / записи в памяти быстрее, чем файловый ввод-вывод.Мой ноутбук, на котором работает 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.