c# - tecnicas - streaming en vivo
¿Qué significa stream? ¿Cuáles son sus características? (5)
Dejando a un lado los términos oficiales y las explicaciones, la palabra corriente en sí se tomó de la corriente de la "vida real": en lugar de agua, los datos se transfieren de un lugar a otro.
Con respecto a la pregunta que hizo y aún no recibió una consulta, puede nombrar sus propias clases en nombres que contengan transmisión, pero solo si implementa algún tipo de nueva transmisión tendrá el significado correcto.
C ++ y C # usan esta stream
palabras para nombrar muchas clases.
- C ++:
iostream
,istream
,istream
,stringstream
,ostream_iterator
,istream_iterator
y más. - C #:
Stream
,FileStream
,MemoryStream
,BufferedStream
, etc.
Entonces me dio curiosidad saber qué significa stream
. ¿Cuáles son las características de una corriente? ¿Cuándo puedo usar este término para nombrar mis clases? ¿Esto está limitado a presentar clases de E / S solamente?
Curiosamente, C no usa esta palabra en ningún lado, hasta donde yo sé.
Desde flujos de E / S (aunque en Java, el significado es el mismo en C ++ / C #)
Una E / S Stream representa una fuente de entrada o un destino de salida. Una secuencia puede representar muchos tipos diferentes de fuentes y destinos, incluidos archivos de disco, dispositivos, otros programas y matrices de memoria.
Los flujos admiten muchos tipos diferentes de datos, incluidos los bytes simples, los tipos de datos primitivos, los caracteres localizados y los objetos. Algunas transmisiones simplemente transmiten datos; otros manipulan y transforman los datos de maneras útiles.
Independientemente de cómo funcionen internamente, todas las transmisiones presentan el mismo modelo simple para los programas que las utilizan: una transmisión es una secuencia de datos. Un programa usa una secuencia de entrada para leer datos de una fuente, un elemento a la vez.
En C #, las secuencias que ha mencionado derivan de la clase base abstracta Stream . Cada implementación de esta clase base tiene un propósito específico.
Por ejemplo, FileStream admite operaciones de lectura / escritura en un archivo, mientras que MemoryStream funciona en un objeto de transmisión en memoria. A diferencia de las clases FileStream
y MemoryStream
, la clase BufferedStream permite al usuario almacenar en búfer las E / S.
Además de las clases anteriores, hay varias otras clases que implementan la clase Stream
. Para obtener una lista completa, consulte la Stream en la clase Stream
.
En las funciones C definidas en <stdio.h>
opere en transmisiones.
La sección 7.19.2 Flujos en C99 discute cómo se comportan, aunque no lo que son, aparte de "una secuencia ordenada de caracteres".
La rationale proporciona más contexto en la sección correspondiente, comenzando con:
C heredó su noción de secuencias de texto del entorno UNIX en el que nació.
De ahí viene el concepto.
Hay un par de significados diferentes. # 1 es lo que probablemente quiere decir, pero es posible que desee ver el # 2 también.
En las bibliotecas como las que mencionó, una "secuencia" es solo una abstracción de "datos binarios", que puede o no ser de acceso aleatorio (a diferencia de los datos que se generan continuamente, como si estuviera escribiendo una secuencia que datos aleatorios generados), o que pueden almacenarse en cualquier lugar (en la RAM, en el disco duro, en una red, en el cerebro del usuario, etc.). Son útiles porque te permiten evitar los detalles y escribir código genérico que no se preocupa por la fuente particular de la transmisión.
Como un concepto más general de ciencias de la computación, a veces se piensa en una "corriente" (vagamente) como "cantidad de datos finita o infinita". El concepto es un poco difícil de explicar sin un ejemplo, pero en la programación funcional (como en Scheme), puede convertir un objeto con estado en un objeto sin estado, al tratar el historial del objeto como una "secuencia" de cambios. (La idea es que el estado de un objeto puede cambiar con el tiempo, pero si trata la vida entera del objeto como una "secuencia" de cambios, la secuencia como un todo nunca cambia, y puede hacer programación funcional con ella).
Muchas estructuras de datos (listas, colecciones, etc.) actúan como contenedores : contienen un conjunto de objetos. Pero no una corriente; si una lista es un cubo, entonces una secuencia es una manguera. Puede extraer datos de una transmisión o insertar datos en una transmisión, pero normalmente solo una vez y solo en una dirección (hay excepciones, por supuesto). Por ejemplo, los datos TCP sobre una red son una secuencia; puede enviar (o recibir) trozos de datos, pero solo en conexión con la otra computadora, y generalmente solo una vez; no puede rebobinar Internet.
Los flujos también pueden manipular los datos que pasan a través de ellos; flujos de compresión, flujos de encriptación, etc. Pero nuevamente, la metáfora subyacente aquí es una manguera de datos. Un archivo generalmente también se accede (en algún nivel) como una secuencia; puedes acceder a bloques de datos secuenciales. Por supuesto, la mayoría de los sistemas de archivos también brindan acceso aleatorio, por lo que los streams ofrecen cosas como Seek, Position, Length, etc., pero no todas las implementaciones admiten eso. No tiene sentido buscar algunas transmisiones u obtener la longitud de un socket abierto.