Zum Inhalt springen

Streams

Stream-Lese-/Schreiboperationen zur effizienten Datenverarbeitung. Stream-Objekte werden von anderen Modulen (HTTP, Dateisystem, etc.) bezogen.

-- Vom HTTP-Request-Body
local stream = req:stream()
-- Vom Dateisystem
local fs = require("fs")
local stream = fs.get("app:data"):open("/file.txt", "r")
local chunk, err = stream:read(size)
ParameterTypBeschreibung
sizeintegerZu lesende Bytes (0 = alle verfügbaren lesen)

Gibt zurück: string, error — nil bei EOF

-- Alle verbleibenden Daten lesen
local data, err = stream:read_all()
local bytes, err = stream:write(data)
ParameterTypBeschreibung
datastringZu schreibende Daten

Gibt zurück: integer, error — geschriebene Bytes

local pos, err = stream:seek(whence, offset)
ParameterTypBeschreibung
whencestring"set", "cur" oder "end"
offsetintegerOffset in Bytes

Gibt zurück: integer, error — neue Position

local ok, err = stream:flush()

Gepufferte Daten in den zugrunde liegenden Speicher schreiben.

local info, err = stream:stat()
FeldTypBeschreibung
sizeintegerGesamtgröße (-1 wenn unbekannt)
positionintegerAktuelle Position
readablebooleanKann gelesen werden
writablebooleanKann geschrieben werden
seekablebooleanKann positioniert werden
local ok, err = stream:close()

Stream schließen und Ressourcen freigeben. Sicher mehrfach aufzurufen.

Tokenizer für Stream-Inhalt erstellen:

local scanner, err = stream:scanner(split)
ParameterTypBeschreibung
splitstring"lines", "words", "bytes", "runes"
local has_more = scanner:scan() -- Zum nächsten Token vorrücken
local token = scanner:text() -- Aktuelles Token abrufen
local err_msg = scanner:err() -- Fehler abrufen falls vorhanden
while scanner:scan() do
local line = scanner:text()
process(line)
end
if scanner:err() then
return nil, errors.new("INTERNAL", scanner:err())
end
BedingungArt
Ungültiger whence/split-TypINVALID
Stream geschlossenINTERNAL
Nicht lesbar/schreibbarINTERNAL
Lese-/SchreibfehlerINTERNAL