Streams
Streams
Sección titulada «Streams»Operaciones de lectura/escritura de streams para manejar datos eficientemente. Los objetos stream se obtienen de otros modulos (HTTP, sistema de archivos, etc.).
-- Desde cuerpo de solicitud HTTPlocal stream = req:stream()
-- Desde sistema de archivoslocal fs = require("fs")local stream = fs.get("app:data"):open("/file.txt", "r")Lectura
Sección titulada «Lectura»local chunk, err = stream:read(size)| Parámetro | Tipo | Descripción |
|---|---|---|
size | integer | Bytes a leer (0 = leer todo disponible) |
Devuelve: string, error - nil en EOF
-- Leer todos los datos restanteslocal data, err = stream:read_all()Escritura
Sección titulada «Escritura»local bytes, err = stream:write(data)| Parámetro | Tipo | Descripción |
|---|---|---|
data | string | Datos a escribir |
Devuelve: integer, error - bytes escritos
Posicionamiento
Sección titulada «Posicionamiento»local pos, err = stream:seek(whence, offset)| Parámetro | Tipo | Descripción |
|---|---|---|
whence | string | "set", "cur", o "end" |
offset | integer | Desplazamiento en bytes |
Devuelve: integer, error - nueva posicion
local ok, err = stream:flush()Vaciar datos almacenados en buffer al almacenamiento subyacente.
Información de Stream
Sección titulada «Información de Stream»local info, err = stream:stat()| Campo | Tipo | Descripción |
|---|---|---|
size | integer | Tamano total (-1 si desconocido) |
position | integer | Posicion actual |
readable | boolean | Puede leer |
writable | boolean | Puede escribir |
seekable | boolean | Puede posicionarse |
local ok, err = stream:close()Cerrar stream y liberar recursos. Seguro llamar multiples veces.
Scanner
Sección titulada «Scanner»Crear un tokenizador para contenido de stream:
local scanner, err = stream:scanner(split)| Parámetro | Tipo | Descripción |
|---|---|---|
split | string | "lines", "words", "bytes", "runes" |
Metodos de Scanner
Sección titulada «Metodos de Scanner»local has_more = scanner:scan() -- Avanzar al siguiente tokenlocal token = scanner:text() -- Obtener token actuallocal err_msg = scanner:err() -- Obtener error si hay algunowhile scanner:scan() do local line = scanner:text() process(line)endif scanner:err() then return nil, errors.new("INTERNAL", scanner:err())endErrores
Sección titulada «Errores»| Condición | Tipo |
|---|---|
| Tipo de whence/split invalido | INVALID |
| Stream cerrado | INTERNAL |
| No es legible/escribible | INTERNAL |
| Fallo de lectura/escritura | INTERNAL |