Что происходит, когда вы пишете (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 не будет копировать данные без необходимости.