Что означает поток? Каковы его характеристики?


C++ и C# используют это слово stream имена многих классов.

  • C++:iostream,istream,ostream,stringstream,ostream_iterator,istream_iterator и так далее.
  • C#:Stream,FileStream,MemoryStream,BufferedStream и так далее.

поэтому мне стало любопытно узнать, что делает stream означает? Каковы характеристики потока? Когда я могу использовать этот термин для названия моих классов? Это ограничено классами ввода-вывода файлов только?

интересно, что C нигде не использует это слово, насколько я знаю.

5 53

5 ответов:

многие структуры данных (списки, коллекции и т. д.) действуют как тара - Они содержат набор объектов. Но не поток; если список-это ведро, то поток-это шланг. Вы можете извлекать данные из потока, или вывести данные в поток - но обычно только один раз и только в в одну сторону (есть исключения конечно). Например, данные TCP по сети являются потоком; вы можете отправлять (или получать) куски данных, но только в соединении с другими компьютер, и обычно только один раз-вы не можете перемотать интернет.

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

есть несколько разных значений. #1-это то, что вы, вероятно, имеете в виду, но вы также можете посмотреть на #2.

  1. в библиотеках, подобных тем, которые вы упомянули, " поток "-это просто абстракция для" двоичных данных", которые могут быть или не быть произвольным доступом (в отличие от данных, которые непрерывно генерируются, например, если вы пишете поток, который генерирует случайные данные), или которые могут храниться в любом месте (в памяти, на жестком диске, по сети, в мозгу пользователя, и т. д.). Они полезны, потому что позволяют избежать подробностей и написать общий код, который не заботится о конкретном источнике потока.

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

С Потоки Ввода-Вывода (хотя в java, значение то же самое в C++ / C#)

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

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

независимо от того, как они работают внутри, все потоки представляют собой один и тот же простой модель для программ, которые их используют: A поток-это последовательность данных. Один программа использует входной поток для чтения данные из источника, один элемент в a время.

в C# потоки, о которых вы упомянули, являются производными от абстрактного базового класса поток. Каждая реализация этого базовый класс имеет определенное назначение.

например, FileStream поддерживает операции чтения / записи в файл, в то время как MemoryStream работает на объекте потока в памяти. В отличие от FileStream и MemoryStream классов, BufferedStream класс позволяет пользователю буферизировать ввод-вывод

В дополнение к вышеперечисленным классам, есть несколько других классов, которые реализуют Stream класса. Для получения полного списка, обратитесь к MSDN документация on Stream класса.

официальные термины и объяснения в сторону, слово поток был взят из "реальной жизни" поток - вместо воды, данные передаются из одного места в другое.

Что касается вопроса, который вы задали и до сих пор не был ansewered, вы можете назвать свои собственные классы в именах, которые содержат поток, но только если вы реализуете какой-то новый поток, он будет иметь правильное значение.

В C функции, определенные в <stdio.h> работать с потоками.

7.19.2 потоки на C99 обсуждает, как они ведут себя, хотя и не то, что они есть, кроме "упорядоченной последовательности символов".

на обоснование дает больше контекста в соответствующем разделе, начиная с:

C унаследовал свое понятие текстовых потоков из среды UNIX, в которой он был родившийся.

Так вот откуда взялась эта концепция.