Я предлагаю вам скопировать весь поток, например, неоднократно вызывая read()
, а затем записывая результаты в ByteArrayOutputStream
.После этого вы можете получить байтовый массив и создать несколько независимых ByteArrayInputStream
оболочек вокруг байтового массива.
(Вы можете использовать ByteStreams.ToByteArray(is)
в Guava в качестве альтернативы для первой части.)
Другой альтернативой было бы заключить оригинальную InputStream
в BufferedInputStream
, немедленно вызвать mark
с «достаточно большим» пределом, а затем сбросить его после прочтения первой строки перед созданием второй * 1012.*.