Как клонировать входной поток в Java в минимальное время

Может кто-нибудь сказать мне, как клонировать входной поток, потратив как можно меньше времени на создание? Мне нужно несколько раз клонировать входной поток для нескольких методов обработки IS. Я'мы пробовали три способа и вещи неработать по той или иной причине.

Метод № 1: Благодаря сообществу stackoverflow я нашел следующую ссылку полезной и включил фрагмент кода в свою программу.

Как клонировать InputStream?

Однако использование этого кода может занять до одной минуты (для файла размером 10 МБ) для создания клонированных входных потоков, и моя программа должна быть максимально быстрой.

    int read = 0;
    byte[] bytes = new byte[1024*1024*2];

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    while ((read = is.read(bytes)) != -1)
        bos.write(bytes,0,read);
    byte[] ba = bos.toByteArray();

    InputStream is1 = new ByteArrayInputStream(ba);
    InputStream is2 = new ByteArrayInputStream(ba);
    InputStream is3 = new ByteArrayInputStream(ba);

Способ № 2: Я также попытался использовать BufferedInputStream для клонирования IS. Это было быстро (самое медленное время создания == 1 мс. Fasttest == 0 мс). Однако после того, как я отправил is1 для обработки, методы обработки is2 и is3 выдавали ошибку, сообщающую, что обрабатывать нечего, почти как все 3 переменные, указанные ниже, ссылаются на один и тот же IS.

    is = getFileFromBucket(path,filename);
    ...
    ...
    InputStream is1 = new BufferedInputStream(is);
    InputStream is2 = new BufferedInputStream(is);
    InputStream is3 = new BufferedInputStream(is);

Метод № 3: Я думаю, что компилятор мне врет. Я проверил markSupported () для is1 для двух приведенных выше примеров. Вернулось правда, поэтому я думал, что смогу бежать

    is1.mark() 
    is1.reset()

или просто

    is1.reset();

перед передачей IS в мои соответствующие методы. В обоих приведенных выше примерах я получаю сообщение об ошибке:Неверный знак

У меня нет идей, поэтому заранее спасибо за любую помощь, которую вы можете мне оказать.

Постскриптум Из комментариев яПолучив от людей, мне нужно прояснить пару моментов, касающихся моей ситуации: 1) Эта программа работает на ВМ. 2) Входной поток передается мне из другого метода. Я'm не читает из локального файла 3) Размер входного потока неизвестен

Ответы на вопрос(4)

Ваш ответ на вопрос