跳转到内容

用于高效处理数据的流读写操作。Stream 对象从其他模块(HTTP、文件系统等)获取。

-- 从 HTTP 请求体
local stream = req:stream()
-- 从文件系统
local fs = require("fs")
local stream = fs.get("app:data"):open("/file.txt", "r")
local chunk, err = stream:read(size)
参数类型描述
sizeinteger要读取的字节数(0 = 读取所有可用)

返回: string, error — EOF 时返回 nil

-- 读取所有剩余数据
local data, err = stream:read_all()
local bytes, err = stream:write(data)
参数类型描述
datastring要写入的数据

返回: integer, error — 写入的字节数

local pos, err = stream:seek(whence, offset)
参数类型描述
whencestring"set""cur""end"
offsetinteger偏移字节数

返回: integer, error — 新位置

local ok, err = stream:flush()

将缓冲数据刷新到底层存储。

local info, err = stream:stat()
字段类型描述
sizeinteger总大小(未知时为 -1)
positioninteger当前位置
readableboolean是否可读
writableboolean是否可写
seekableboolean是否可定位
local ok, err = stream:close()

关闭流并释放资源。可多次安全调用。

为流内容创建分词器:

local scanner, err = stream:scanner(split)
参数类型描述
splitstring"lines""words""bytes""runes"
local has_more = scanner:scan() -- 前进到下一个 token
local token = scanner:text() -- 获取当前 token
local err_msg = scanner:err() -- 获取错误(如有)
while scanner:scan() do
local line = scanner:text()
process(line)
end
if scanner:err() then
return nil, errors.new("INTERNAL", scanner:err())
end
条件类型
无效的 whence/split 类型INVALID
流已关闭INTERNAL
不可读/不可写INTERNAL
读写失败INTERNAL