Skip to content

Streams

Stream read/write operations for handling data efficiently. Stream objects are obtained from other modules (HTTP, filesystem, etc.).

-- From HTTP request body
local stream = req:stream()
-- From filesystem
local fs = require("fs")
local stream = fs.get("app:data"):open("/file.txt", "r")
local chunk, err = stream:read(size)
ParameterTypeDescription
sizeintegerBytes to read (0 = default 32KB chunk)

Returns: string, errornil, nil on EOF

local bytes, err = stream:write(data)
ParameterTypeDescription
datastringData to write

Returns: integer, error — bytes written

local pos, err = stream:seek(whence, offset)
ParameterTypeDescription
whencestring"set", "cur", or "end"
offsetintegerOffset in bytes

Returns: integer, error — new position

local ok, err = stream:flush()

Flush buffered data to underlying storage.

local info, err = stream:stat()
FieldTypeDescription
sizeintegerTotal size (-1 if unknown)
positionintegerCurrent position
readablebooleanCan read
writablebooleanCan write
seekablebooleanCan seek
local ok, err = stream:close()

Close stream and release resources. Safe to call multiple times.

Create a tokenizer for stream content:

local scanner, err = stream:scanner(split)
ParameterTypeDescription
splitstring"lines", "words", "bytes", "runes"
local has_more, err = scanner:scan() -- advance to next token
local token = scanner:text() -- current token
local err_msg = scanner:err() -- scanner error if any
while true do
local has_token, err = scanner:scan()
if err then return nil, err end
if not has_token then break end -- EOF
process(scanner:text())
end
ConditionKind
Invalid whence/split typeINVALID
Stream closedINTERNAL
Not readable/writableINTERNAL
Read/write failureINTERNAL