# Stream (computação)

Em ciência da computação, stream, em português fluxo, é uma sequência de elementos de dados disponibilizados ao longo do tempo. Um fluxo pode ser considerado como itens em uma esteira transportadora sendo processados um por vez, em vez de em grandes lotes.
Os fluxos são processados de maneira diferente dos dados em lote - as funções normais não podem operar em fluxos como um todo, pois têm dados potencialmente ilimitados e, formalmente, os fluxos são codatos (potencialmente ilimitados), não dados (que são finitos). Funções que operam em um fluxo, produzindo outro fluxo, são conhecidas como filtros e podem ser conectadas em pipelines, analogamente à composição de funções. Os filtros podem operar em um item de um fluxo de cada vez ou podem basear um item de saída em vários itens de entrada, como uma média móvel.

## Exemplos

O termo "stream" é usado de várias maneiras semelhantes:
* "Edição de stream", como com sed, awk e perl. A edição de fluxo processa um arquivo ou arquivos, no local, sem ter que carregar o(s) arquivo(s) em uma interface de usuário. Um exemplo desse uso é fazer uma busca e substituição em todos os arquivos de um diretório, a partir da linha de comando.
* No Unix e em sistemas relacionados baseados na linguagem C, um fluxo é uma fonte ou coletor de dados, geralmente bytes ou caracteres individuais. Streams são uma abstração usada ao ler ou gravar arquivos ou se comunicar por meio de soquetes de rede. Os streams padrões são três streams disponibilizados para todos os programas.
* Os dispositivos de E/S podem ser interpretados como fluxos, pois produzem ou consomem dados potencialmente ilimitados ao longo do tempo.
* Em programação orientada a objetos, os fluxos de entrada são geralmente implementados como iteradores.
* Na linguagem Scheme e em algumas outras, um stream é uma sequência de elementos de dados avaliada vagarosamente ou atrasada. Um fluxo pode ser usado de forma semelhante a uma lista, mas os elementos posteriores são calculados apenas quando necessário. Os fluxos podem, portanto, representar sequências e séries infinitas.
* Na biblioteca padrão da Smalltalk, e também em outras linguagens de programação, um stream é um iterador externo. Como em Scheme, streams podem representar sequências finitas ou infinitas.
* Processamento de fluxo - no processamento paralelo, especialmente no processamento gráfico, o termo fluxo é aplicado tanto ao hardware quanto ao software. Lá, ele define o fluxo quase contínuo de dados que é processado em uma linguagem de programação de fluxo de dados assim que o estado do programa atende à condição inicial do fluxo.

## Aplicações

Os fluxos podem ser usados como o tipo de dado subjacente para canais na comunicação entre processos.

## Outros usos

O termo "fluxo" também é aplicado a bifurcações de sistema de arquivos, onde vários conjuntos de dados são associados a um único nome de arquivo. Na maioria das vezes, há um fluxo principal que constitui os dados normais do arquivo, enquanto fluxos adicionais contêm metadados. Aqui, "fluxo" é usado para indicar "dados de tamanho variável", em oposição aos metadados de tamanho fixo, como atributos estendidos, mas difere de "fluxo" usado de outra forma, significando "dados disponíveis ao longo do tempo, potencialmente infinitos".