Stream

De ArduWiki
Saltar a: navegación, buscar

Descripción

Stream es la clase base para las secuencias (flujos) de entrada, basadas en caracteres y binarios. No se llama directamente, sino que se invoca cada vez que usa un método (función) que depende de él.

Al heredar también de Print, además adquiere la capacidad de ser la base para flujos que a la vez son de salida (bidireccionales).

Stream define las funciones de lectura en Arduino. Al usar cualquier funcionalidad principal que use un Serial.read() método similar, puede asumir de manera segura que llama a la clase Stream. Para funciones como Serial.print(), Stream hereda de la clase Print.

Nota: Cuando se crea una clase que requiera de las siguientes funciones (métodos), estas DEBEN ser implementadas explícitamente: read(), peek(), available(), write() de un único byte y flush(). availableForWrite() es opcional, sin embargo debería implementarse si el flujo de salida es asincrónico (no bloqueante) y byte a byte; no así para transferencias por bloques (ej.: para memorias de almacenamiento masivo como las tarjetas SD).


Sintaxis

Stream objeto;

Parámetros

objeto
nombre del objeto instancias de la clase Stream.

Retorna

Nada.

Métodos

Nota: Stream es una clase "abstracta" o "virtual"; a pesar de que no se le pueda referir directamente por su nombre, así se denotará en la siguiente tabla con el propósito de diferenciarse de las subclases.


Métodos de clase Stream
Método Descripción
Stream.setTimeout() Cambia el tiempo de espera (de la llegada de nuevos datos). Por defecto es 1 segundo.
Stream.getTimeout() Retorna el tiempo de espera actualmente configurado.
Stream.available() Indica el número de bytes/caracteres disponibles para lectura.
Stream.read() Lee un carácter/byte disponible.
Stream.readBytes() Lee uno o más bytes, y los almacena en el buffer/vector/matriz espeficificado.
Stream.readBytesUntil() Similar al anterior, excepto que con la posibilidad de además finalizar con un terminador.
Stream.readString() Convierte el flujo de entrada en un objeto String.
Stream.readStringUntil() Similar al anterior, excepto que con la posibilidad de además finalizar con un terminador.
Stream.peek() Lee un carácter disponible, pero no lo descarta del flujo y/o no lo hace "avanzar".
Stream.write()* Envia datos binarios al flujo de salida.
Stream.availableForWrite()* Indica el número de bytes que todavía están pendientes de enviarse (no aplica para flujos sincrónicos o por bloques).
Stream.print()* Imprime (envía), al flujo de salida, una representación textual de un dato.
Stream.println()* Imprime (envía), al flujo de salida, una representación textual de un dato junto con un salto de línea; o solo este último.
Stream.flush()* Espera a que todos los bytes se hayan enviado (para flujos byte a byte asincrónicos), o fuerza el envío de estos (para flujos por bloques).
Stream.find() Lee datos hasta encontrar una coincidencia con una cadena de caracteres o bytes.
Stream.findUntil() Similar al anterior, excepto que con la posibilidad de además finalizar con una cadena terminadora.
Stream.parseInt() Convierte el flujo de entrada en un valor entero, asumiendo codificación textual.
Stream.parseFloat() Convierte el flujo de entrada en un valor punto flotante, asumiendo codificación textual.

Nota: los métodos marcados con * son los que se heredan de Print.


Advertencias

  • Para usar un método debe reemplazar la palabra Stream por el nombre del objeto instanciado.

Comentarios

Esta clase esta presente en las siguientes librerías:

Nota: A pesar de estas funciones existen en varias implementaciones (ej.: Serial), su función real puede variar según el contexto de la subclase. Aquí se explicarán de manera generalizada.

Nota: Se entiende por flujo sincrónico por aquel que no posee buffer y bloquea la ejecución del programa cada vez que se intenta operar sobre este; su opuesto, el flujo asincrónico, sí tiene buffer y no bloquea. Se entiende por flujo byte a byte o flujo de caracteres a aquel donde los bytes son recibidos/enviados inmediatamente; mientras que el flujo por bloques necesariamente debe tener un buffer llamado "caché", y los datos son enviados/recibidos únicamente bajo demanda.


Vea también


Referencia