Отношения между потоком и буфером? - PullRequest
0 голосов
/ 29 мая 2019

Я начинающий программист, можете ли вы помочь мне представить, что такое поток, это фиксированный массив байтов, который передает данные, например, из файла в Y?И что здесь Y, буфер или что-то еще?Каким образом буфер связан с потоком?

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

Поток - это либо источник (входной поток), либо приемник (выходной поток) данных, которые доступны (или предоставлены) во времени (в отличие от всех сразу).

Буфер - это массив (фрагмент памяти), который используется для временного хранения данных. Входной буфер обычно заполняется из входного потока ОС; выходной буфер (заполняемый программистом) используется ОС.

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

Загрузка файла, например, работает почти так же. У вас есть источник данных (файл на диске); вы открываете входной поток (программная конструкция, которая обычно дает вам данные настолько быстро, насколько их может прочитать диск). Вы выделяете буфер (небольшую область памяти) и говорите системе заполнить его из потока. Когда он заполнен, вы добавляете его в большой кусок выделенной памяти, который вы зарезервировали для содержимого файла, а затем даете буферу снова заполниться. Когда весь файл прочитан, вы закрываете поток.

1 голос
/ 29 мая 2019

Разница между буфером и потоком составляет

A Поток - это последовательность байтов данных, которая передает информацию из или в указанный источник.

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

A Буфер - это последовательность байтов, которые хранятся в памяти.

В C операции ввода-вывода являются асинхронными: вы не знаете, когда у вас есть данные или их объем. Таким образом, буфер обычно используется для сбора данных из потока (файл, сокет, устройство).Когда буфер заполнен, потребители этого потока уведомляются и могут использовать данные из буфера, пока не будут исчерпаны.Затем подождите, пока буфер снова заполнится, прежде чем использовать эти данные.Это место для временного хранения чего-либо, чтобы уменьшить разницу между входной скоростью и выходной скоростью.Пока производитель работает быстрее, чем потребитель, производитель может продолжать сохранять выходные данные в буфере.Когда потребитель ускоряется, он может читать из буфера.Буфер находится посередине для преодоления разрыва.

Y в вашем вопросе может быть файл, сокет или устройство (I / O).

Надеюсь, это решит ваш запрос :)

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