Что такое буфер в ByteArrayOutputStream (int size) точно? - PullRequest
0 голосов
/ 27 мая 2018

Я понимаю, что такое буфер при записи в файл - запись в OS-файл (вызов нативного API - один вызов метода для одного символа) является дорогостоящей, поэтому в буфере собирается много символов / байтов и записывается буферк файлу с одним вызовом API OS.

Но какой здесь буфер?И почему?

ByteArrayOutputStream (int size) - Создает новый выходной поток массива байтов с емкостью буфера указанного размера в байтах.

ByteArrayOutputStream () имеет 32-байтовый буфер по умолчанию, поэтому у Apache Commons точно такой же класс org.apache.commons.io.output.ByteArrayOutputStream, отличающийся только размером буфера и механизмом: «ОригиналРеализация выделяет только 32 байта в начале. Так как этот класс предназначен для работы в тяжелых условиях, он начинается с 1024 байтов. В отличие от оригинала, он не перераспределяет весь блок памяти, а выделяет дополнительные буферы. Таким образом, буферы не должны быть мусоромсобранный и содержимое не должно быть скопировано в новый буфер. Этот класс разработан, чтобы вести себя точно так же, как оригинал. "

Кроме в ByteArrayInputStream(byte[] buf), как я понимаю," buf "(буфер) на самом деле является источником данных (байтов), которые должны быть переданы в InputStream (ByteArrayInputStream эмулирует InputStream из байтового массива), , поэтому, по моему мнению, буфер слов здесь сбивает с толку.

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Javadoc говорит:

Этот класс реализует поток вывода, в котором данные записываются в байтовый массив.Буфер автоматически увеличивается при записи данных в него.

Таким образом, в пространстве двух предложений он использовал два разных термина.В том же документе есть множество других примеров.

С одной стороны, это может сбить с толку, если вы не знаете, что они имеют в виду одно и то же;было бы яснее, если бы он сказал что-то вроде:

записывается в буфер, реализованный в виде байтового массива.

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

0 голосов
/ 27 мая 2018

Этот класс реализует выходной поток, в котором данные записываются в байтовый массив . буфер автоматически увеличивается при записи данных в него.

Два полужирных термина являются синонимами.Буфер - это массив byte[], который содержит байты, записанные в поток.

Размер буфера аналогичен емкости ArrayList .Если вы записываете более 32 байтов в поток, то он должен увеличить буфер, что включает выделение нового массива и копирование байтов из старого в новый.«Емкость» по умолчанию 32 неэффективна, если вы знаете, что будете писать больше, чем это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...