Если вы используете реализацию InputStream
, вы можете проверить результат InputStream#markSupported()
, который говорит вам, можете ли вы использовать метод mark()
/ reset()
.
Если вы можете пометить поток во время чтения, а затем вызвать reset()
, чтобы вернуться к началу.
Если вы не можете, вам придется снова открыть поток.
Другим решением было бы преобразовать InputStream в массив байтов, а затем перебрать по массиву столько раз, сколько вам нужно. Вы можете найти несколько решений в этой статье Преобразование InputStream в байтовый массив в Java с использованием сторонних библиотек или нет. Предупреждение: если прочитанный контент слишком велик, вы можете столкнуться с некоторыми проблемами памяти.
Наконец, если вам нужно прочитать изображение, используйте:
BufferedImage image = ImageIO.read(new URL("http://www.example.com/images/toto.jpg"));
Используя ImageIO#read(java.net.URL)
также позволяет использовать кеш.