Ir al contenido

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 HTTP
local stream = req:stream()
-- Desde sistema de archivos
local fs = require("fs")
local stream = fs.get("app:data"):open("/file.txt", "r")
local chunk, err = stream:read(size)
ParámetroTipoDescripción
sizeintegerBytes a leer (0 = leer todo disponible)

Devuelve: string, error - nil en EOF

-- Leer todos los datos restantes
local data, err = stream:read_all()
local bytes, err = stream:write(data)
ParámetroTipoDescripción
datastringDatos a escribir

Devuelve: integer, error - bytes escritos

local pos, err = stream:seek(whence, offset)
ParámetroTipoDescripción
whencestring"set", "cur", o "end"
offsetintegerDesplazamiento en bytes

Devuelve: integer, error - nueva posicion

local ok, err = stream:flush()

Vaciar datos almacenados en buffer al almacenamiento subyacente.

local info, err = stream:stat()
CampoTipoDescripción
sizeintegerTamano total (-1 si desconocido)
positionintegerPosicion actual
readablebooleanPuede leer
writablebooleanPuede escribir
seekablebooleanPuede posicionarse
local ok, err = stream:close()

Cerrar stream y liberar recursos. Seguro llamar multiples veces.

Crear un tokenizador para contenido de stream:

local scanner, err = stream:scanner(split)
ParámetroTipoDescripción
splitstring"lines", "words", "bytes", "runes"
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
CondiciónTipo
Tipo de whence/split invalidoINVALID
Stream cerradoINTERNAL
No es legible/escribibleINTERNAL
Fallo de lectura/escrituraINTERNAL