流
用于高效处理数据的流读写操作。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)
| 参数 | 类型 | 描述 |
|---|---|---|
size |
integer | 要读取的字节数(0 = 读取所有可用) |
返回: string, error — EOF 时返回 nil
-- 读取所有剩余数据
local data, err = stream:read_all()
写入
local bytes, err = stream:write(data)
| 参数 | 类型 | 描述 |
|---|---|---|
data |
string | 要写入的数据 |
返回: integer, error — 写入的字节数
定位
local pos, err = stream:seek(whence, offset)
| 参数 | 类型 | 描述 |
|---|---|---|
whence |
string | "set"、"cur" 或 "end" |
offset |
integer | 偏移字节数 |
返回: integer, error — 新位置
刷新
local ok, err = stream:flush()
将缓冲数据刷新到底层存储。
流信息
local info, err = stream:stat()
| 字段 | 类型 | 描述 |
|---|---|---|
size |
integer | 总大小(未知时为 -1) |
position |
integer | 当前位置 |
readable |
boolean | 是否可读 |
writable |
boolean | 是否可写 |
seekable |
boolean | 是否可定位 |
关闭
local ok, err = stream:close()
关闭流并释放资源。可多次安全调用。
Scanner
为流内容创建分词器:
local scanner, err = stream:scanner(split)
| 参数 | 类型 | 描述 |
|---|---|---|
split |
string | "lines"、"words"、"bytes"、"runes" |
Scanner 方法
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 |