Streams

Operaciones de lectura/escritura de streams para manejar datos eficientemente. Los objetos stream se obtienen de otros modulos (HTTP, sistema de archivos, etc.).

Carga

-- Desde cuerpo de solicitud HTTP
local stream = req:stream()

-- Desde sistema de archivos
local fs = require("fs")
local stream = fs.get("app:data"):open("/file.txt", "r")

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 restantes
local data, err = stream:read_all()

Escritura

local bytes, err = stream:write(data)
Parámetro Tipo Descripción
data string Datos a escribir

Devuelve: integer, error - bytes escritos

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

Flush

local ok, err = stream:flush()

Vaciar datos almacenados en buffer al almacenamiento subyacente.

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

Cierre

local ok, err = stream:close()

Cerrar stream y liberar recursos. Seguro llamar multiples veces.

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

local has_more = scanner:scan()  -- Avanzar al siguiente token
local token = scanner:text()      -- Obtener token actual
local err_msg = scanner:err()     -- Obtener error si hay alguno
while scanner:scan() do
    local line = scanner:text()
    process(line)
end
if scanner:err() then
    return nil, errors.new("INTERNAL", scanner:err())
end

Errores

Condición Tipo
Tipo de whence/split invalido INVALID
Stream cerrado INTERNAL
No es legible/escribible INTERNAL
Fallo de lectura/escritura INTERNAL