Что происходит, когда вы пишете (byte[] b) в BufferedOutputStream? (Джава)

Когда вы используете метод write(byte[] b) для записи в BufferedOutputStream, используется метод записи из FilterOutputStream. В документации сказано:

"Метод записи FilterOutputStream вызывает метод записи трех аргументов с аргументами b, 0 и b.length".

На какой метод записи с тремя аргументами он ссылается? Один в FilterOutputStream, или один в BufferedOutputStream? (т.е. действительно ли запись буферизована?).

Я верю, что это так, но я не уверен.

2 ответа

Решение

BufferedOutputStream переопределяет write(byte[], int, int) метод, так что вызывается новое переопределение. Да, запись буферизована.

Ответ и да, и нет. Подводя итог моим находкам: эффективный результат немного отличается от обещания ("буферизованного"), потому что моментальная очистка потока зависит как от размера буфера, так и от объема данных, которые вы сохраняете за вызов.

Ниже приводится несколько более подробный http://docs.oracle.com/javase/7/docs/api/java/io/BufferedOutputStream.html (выделение мое):

Записывает len байтов из указанного байтового массива, начиная со смещения, в этот буферизованный выходной поток.

Обычно этот метод сохраняет байты из данного массива в буфере этого потока, сбрасывая буфер в основной выходной поток по мере необходимости. Однако если запрошенная длина по меньшей мере равна размеру буфера этого потока, тогда этот метод очистит буфер и запишет байты непосредственно в базовый выходной поток. Таким образом, избыточный BufferedOutputStreams не будет копировать данные без необходимости.

Другие вопросы по тегам