ストリーム
データを効率的に処理するためのストリーム読み書き操作。ストリームオブジェクトは他のモジュール(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()バッファリングされたデータを基礎となるストレージにフラッシュ。
ストリーム情報
Section titled “ストリーム情報”local info, err = stream:stat()| フィールド | 型 | 説明 |
|---|---|---|
size | integer | 合計サイズ(不明の場合-1) |
position | integer | 現在の位置 |
readable | boolean | 読み取り可能 |
writable | boolean | 書き込み可能 |
seekable | boolean | シーク可能 |
local ok, err = stream:close()ストリームをクローズしてリソースを解放。複数回呼び出しても安全。
ストリームコンテンツ用のトークナイザを作成:
local scanner, err = stream:scanner(split)| パラメータ | 型 | 説明 |
|---|---|---|
split | string | "lines"、"words"、"bytes"、"runes" |
スキャナメソッド
Section titled “スキャナメソッド”local has_more = scanner:scan() -- 次のトークンに進むlocal token = scanner:text() -- 現在のトークンを取得local err_msg = scanner:err() -- エラーがあれば取得while scanner:scan() do local line = scanner:text() process(line)endif scanner:err() then return nil, errors.new("INTERNAL", scanner:err())end| 条件 | 種別 |
|---|---|
| 無効なwhence/splitタイプ | INVALID |
| ストリームがクローズ済み | INTERNAL |
| 読み取り/書き込み不可 | INTERNAL |
| 読み取り/書き込み失敗 | INTERNAL |