Я только что просмотрел код, и здесь нет решения (без переписывания itext и летающей тарелки).
при первом открытии потока просто проверить, можно ли его открыть, данные не читаются.
второй раз - чтение заголовка с помощью itext для определения типа файла, считываются только первые 4 байта.
третий раз, когда itext определяет размеры изображения, которое кажется, - я не уверен, но я не думаю, что здесь читают также много, кроме заголовков.
последнее чтение для рендеринга изображения.
так что влияние загрузки невелико, 4 URL-соединения - да, но весь поток передается только один раз
и мой кэш «истекает при использовании» вместо этого должен быть «истекает при 4-м использовании».