Streams

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

Laden

-- Vom HTTP-Request-Body
local stream = req:stream()

-- Vom Dateisystem
local fs = require("fs")
local stream = fs.get("app:data"):open("/file.txt", "r")

Lesen

local chunk, err = stream:read(size)
Parameter Typ Beschreibung
size integer Zu 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()

Schreiben

local bytes, err = stream:write(data)
Parameter Typ Beschreibung
data string Zu schreibende Daten

Gibt zurück: integer, error — geschriebene Bytes

Positionieren

local pos, err = stream:seek(whence, offset)
Parameter Typ Beschreibung
whence string "set", "cur" oder "end"
offset integer Offset in Bytes

Gibt zurück: integer, error — neue Position

Flushen

local ok, err = stream:flush()

Gepufferte Daten in den zugrunde liegenden Speicher schreiben.

Stream-Info

local info, err = stream:stat()
Feld Typ Beschreibung
size integer Gesamtgröße (-1 wenn unbekannt)
position integer Aktuelle Position
readable boolean Kann gelesen werden
writable boolean Kann geschrieben werden
seekable boolean Kann positioniert werden

Schließen

local ok, err = stream:close()

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

Scanner

Tokenizer für Stream-Inhalt erstellen:

local scanner, err = stream:scanner(split)
Parameter Typ Beschreibung
split string "lines", "words", "bytes", "runes"

Scanner-Methoden

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

Fehler

Bedingung Art
Ungültiger whence/split-Typ INVALID
Stream geschlossen INTERNAL
Nicht lesbar/schreibbar INTERNAL
Lese-/Schreibfehler INTERNAL