Как клонировать входной поток в Java в минимальное время
Может кто-нибудь сказать мне, как клонировать входной поток, потратив как можно меньше времени на создание? Мне нужно несколько раз клонировать входной поток для нескольких методов обработки IS. Я'мы пробовали три способа и вещи неработать по той или иной причине.
Метод № 1: Благодаря сообществу stackoverflow я нашел следующую ссылку полезной и включил фрагмент кода в свою программу.
Однако использование этого кода может занять до одной минуты (для файла размером 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) Размер входного потока неизвестен