Diferencia entre revisiones de «Stream»

De ArduWiki
Saltar a: navegación, buscar
(Vea también)
(La referencia "SD" se supone que es a la librería)
Línea 1: Línea 1:
 
== Descripción ==
 
== Descripción ==
Stream es la clase base para las secuencias basadas en caracteres y binarios. No se llama directamente, sino que se invoca cada vez que utiliza una función que depende de él.
+
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 utiliza una función que depende de él.<br>
 +
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.
+
'''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]]).}}
  
 
== Métodos ==
 
== 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.}}{{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 opouesto, 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.}}
 
{|class="wikitable"
 
{|class="wikitable"
|+Métodos disponible en clase Stream
+
!Método!!Descripcion
!Método!!Descripción
+
|-
 +
|[[Stream.setTimeout()]]||Cambia el tiempo de espera (de la llegada de nuevos datos).
 +
|-
 +
|[[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.available()]]||Obtiene la cantidad de bytes disponibles en la transmisión. Esto es solo para bytes que ya han llegado.
+
|[[Stream.readBytesUntil()]]||Similar al anterior, excepto que con la posibilidad de además finalizar con un terminador.
 
|-
 
|-
|[[Stream.read()]]||lee caracteres de una secuencia entrante al búfer.
+
|[[Stream.readString()]]||Convierte el flujo de entrada en un objeto [[String]].
 
|-
 
|-
|[[Stream.peek()]]||Lee un byte del archivo sin avanzar al siguiente.
+
|[[Stream.readStringUntil()]]||Similar al anterior, excepto que con la posibilidad de además finalizar con un terminador.
 
|-
 
|-
|[[Stream.readBytes()]]||Lee caracteres de una secuencia en un búfer.
+
|[[Stream.peek()]]||Lee un carácter disponible, pero no lo descarta del flujo y no lo hace "avanzar".
 
|-
 
|-
|[[Stream.readBytesUntil()]]||Lee caracteres de una secuencia en un búfer.
+
|[[Stream.write()]]||Envia datos binarios al flujo de salida.
 
|-
 
|-
|[[Stream.readString()]]||Lee caracteres de una secuencia en un búfer.  
+
|[[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.readStringUntil()]]||Lee caracteres de una secuencia en una cadena.
+
|[[Stream.print()]]||Imprime (envía), al flujo de salida, una representación textual de un dato.
 
|-
 
|-
|[[Stream.flush()]]||Borra el búfer una vez que se han enviado todos los caracteres salientes.
+
|[[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.find()]]||Lee los datos de la secuencia hasta que se encuentra la cadena de destino de longitud dada La función devuelve verdadero si se encuentra cadena de destino, falsa si se agota el tiempo de espera.
+
|[[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.findUntil()]]||Lee los datos de la secuencia hasta que se encuentra la cadena de destino de la longitud determinada o cadena de terminación.
+
|[[Stream.find()]]||Lee datos hasta encontrar una coincidencia con una cadena de caracteres o bytes.
 
|-
 
|-
|[[Stream.parseInt()]]||Devuelve el primer número entero válido (largo) del búfer en serie. Los caracteres que no son dígitos o el signo menos se saltan. El analisis se detiene cuando no se ha leido caracteres por cierto tiempo, en cuyo caso devuelve 0. Ver [[Stream.setTimeout()]]. Termina con el primer carácter no valido. Devuelve un numero tipo [[float]] o 0.
+
|[[Stream.findUntil()]]||Similar al anterior, excepto que con la posibilidad de además finalizar con una cadena terminadora.
 
|-
 
|-
|[[Stream.parseFloat()]]||Devuelve el primer numero de punto flotante en la secuencia de entrada. Los caracteres que no sea digitos o signo - se saltan.
+
|[[Stream.parseInt()]]||Convierte el flujo de entrada en un valor entero, asumiendo codificación textual.
 
|-
 
|-
|[[Stream.setTimeout()]]||Establece los milisegundos máximos para esperar los datos de la secuencia. Por defecto es 1000 milisegundos.
+
|[[Stream.parseFloat()]]||Convierte el flujo de entrada en un valor punto flotante, asumiendo codificación textual.
 
|}
 
|}
  
Línea 41: Línea 52:
 
* [[String]] - clase
 
* [[String]] - clase
 
* [[Ethernet]] - clase
 
* [[Ethernet]] - clase
* [[EthernetUPD]] - clase
+
* [[EthernetUDP]] - clase
 
* [[IPAddress]] - clase
 
* [[IPAddress]] - clase
 
* [[Server]] - clase
 
* [[Server]] - clase

Revisión del 20:46 4 jul 2018

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 utiliza una 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).


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.

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 opouesto, 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.


Método Descripcion
Stream.setTimeout() Cambia el tiempo de espera (de la llegada de nuevos datos).
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 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.

Vea también

Referencia