Подтвердить что ты не робот

Какова цель BufferedOutputStream?

Мне интересно задание BufferedOutputStream, повышение производительности при его использовании?

4b9b3361

Ответ 1

Вот строка из API BufferedOutputStream:

Класс реализует буферный выходной поток. Путем настройки такого выходного потока приложение может записывать байты в базовый выходной поток без, обязательно вызывающий вызов базовой системы для каждого записанного байта.

Он может выполнять большую часть операций в буфере и без вызова базовой системы.

Например, рассмотрим запись в файл: без буфера, он должен сделать системный вызов для каждого байта, что явно медленнее.

Ответ 2

Как следует из его названия, BufferOutputStream имеет внутренний буфер (byte[]), к которому сначала копируется содержимое отдельных небольших записей. Они записываются в базовый OutputStream, когда буфер заполнен, или поток очищается, или поток закрыт. Это может иметь большое значение, если для каждой операции записи есть (относительно большие) фиксированные накладные расходы для базового OutputStream, как это имеет место для FileOutputStream (который должен сделать вызов операционной системы) и многих сжатых потоков.

В то же время многие потоковые библиотеки используют свою собственную буферизацию (например, писатели XML и JSON), а использование BufferedOutputStream не дает никакой пользы. Но его собственные накладные расходы относительно низки, поэтому риск невелик.

Ответ 3

BufferedOutputStream обеспечивает буферизацию выходных данных, что повышает эффективность, сохраняя значения, которые должны быть записаны в буфер, и фактически записывать их при заполнении буфера или при вызове метода flush().