Я пытаюсь прочитать java.io.InputStream
несколько раз, начиная с вершины потока.
Очевидно, что для потоков, которые возвращают true
в markSupported()
, я могу попробовать использовать mark(availableBytes)
, а затем reset()
, чтобы снова прочитать поток сверху.
Большинство потоков не поддерживают метки, а те, которые (например, java.io.BufferedInputStream
), копируют данные во временный байтовый массив, что не очень хорошо с точки зрения потребления памяти и т. Д.
Если мой метод получает java.io.InputStream
в качестве параметра, могу ли я закрыть его, а затем каким-то образом снова открыть, чтобы сбросить тот же исходный поток наверх, чтобы я мог прочитать его снова?
Я не смог найти никакого способа сделать этот трюк, кроме записи оригинального InputStream
в память (як!) Или временного файла и открытия нового InputStream
во эти временные местоположения, если мне нужно снова прочитать поток сверху .