Поскольку вы используете средства чтения (BufferedReader
и InputStreamReader
), они читают данные из исходного потока (переменная inputStream
) в виде символов, а не байтов.Поэтому после прочтения первой строки из читателя исходный поток будет пустым.Это потому, что читатель попытается заполнить весь буфер символов (по умолчанию это defaultCharBufferSize = 8192
символов).Таким образом, вы больше не можете использовать оригинальный поток, потому что у него больше нет данных.Вы должны прочитать оставшиеся символы из существующей программы чтения и создать новый InputStream с оставшимися данными.Пример кода ниже:
public static void main(String[] args) throws Exception {
ByteArrayInputStream bais = new ByteArrayInputStream("line 1 \r\n line 2 \r\n line 3 \r\n line 4".getBytes());
BufferedReader reader = new BufferedReader(new InputStreamReader(bais));
System.out.println(reader.readLine());
StringBuilder sb = new StringBuilder();
int c;
while ((c = reader.read()) > 0)
sb.append((char)c);
String remainder = sb.toString();
System.out.println("`" + remainder + "`");
InputStream streamWithRemainingLines = new ByteArrayInputStream(remainder.getBytes());
}
Обратите внимание, что \r\n
не потеряны