Streams
Streams
Abschnitt betitelt „Streams“Stream-Lese-/Schreiboperationen zur effizienten Datenverarbeitung. Stream-Objekte werden von anderen Modulen (HTTP, Dateisystem, etc.) bezogen.
-- Vom HTTP-Request-Bodylocal stream = req:stream()
-- Vom Dateisystemlocal fs = require("fs")local stream = fs.get("app:data"):open("/file.txt", "r")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 lesenlocal data, err = stream:read_all()Schreiben
Abschnitt betitelt „Schreiben“local bytes, err = stream:write(data)| Parameter | Typ | Beschreibung |
|---|---|---|
data | string | Zu schreibende Daten |
Gibt zurück: integer, error — geschriebene Bytes
Positionieren
Abschnitt betitelt „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
Abschnitt betitelt „Flushen“local ok, err = stream:flush()Gepufferte Daten in den zugrunde liegenden Speicher schreiben.
Stream-Info
Abschnitt betitelt „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
Abschnitt betitelt „Schließen“local ok, err = stream:close()Stream schließen und Ressourcen freigeben. Sicher mehrfach aufzurufen.
Scanner
Abschnitt betitelt „Scanner“Tokenizer für Stream-Inhalt erstellen:
local scanner, err = stream:scanner(split)| Parameter | Typ | Beschreibung |
|---|---|---|
split | string | "lines", "words", "bytes", "runes" |
Scanner-Methoden
Abschnitt betitelt „Scanner-Methoden“local has_more = scanner:scan() -- Zum nächsten Token vorrückenlocal token = scanner:text() -- Aktuelles Token abrufenlocal err_msg = scanner:err() -- Fehler abrufen falls vorhandenwhile scanner:scan() do local line = scanner:text() process(line)endif scanner:err() then return nil, errors.new("INTERNAL", scanner:err())end| Bedingung | Art |
|---|---|
| Ungültiger whence/split-Typ | INVALID |
| Stream geschlossen | INTERNAL |
| Nicht lesbar/schreibbar | INTERNAL |
| Lese-/Schreibfehler | INTERNAL |