Я немного запутался в потоке ввода-вывода Java. У меня есть случай, когда мой входной поток очень быстрый (например, чтение файла с диска), но мой выходной поток очень медленный (например, запись в выходной поток ответа HTTP-сервлета).Входной поток Java быстрее, чем выходной поток
Что произойдет, если размер моего файла очень велик, в конечном итоге мой выходной поток (поданный во входной поток от файла) выкинет любое исключение, связанное с памятью, и закроет поток? или мой метод вывода выходного потока будет заблокирован до тех пор, пока данные выходного потока не будут очищены?
Возможно ли, чтобы выходной поток был заполнен?
public void pipe(InputStream is, OutputStream os) throws IOException {
int n;
byte[] buffer = new byte[1024];
while((n = is.read(buffer)) > -1) {
os.write(buffer, 0, n); // would this get blocked if outputstream is full?
}
os.close();
}
Прежде всего, неудивительно, что чтение обычно происходит быстрее, чем запись. А во-вторых, пожалуйста, решите, что вы хотите спросить. Заголовок вопроса и первый абзац, похоже, задают нечто иное, чем второй абзац и код. – Tom