Что происходит, когда вы пишете (byte [] b) в BufferedOutputStream? (Джава) - PullRequest
1 голос
/ 14 февраля 2012

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

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

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

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

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

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

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

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

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

1 голос
/ 14 февраля 2012

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

...