Streams
Streams
Seção intitulada “Streams”Operações de leitura/escrita de stream para manipular dados eficientemente. Objetos stream sao obtidos de outros modulos (HTTP, filesystem, etc.).
Carregamento
Seção intitulada “Carregamento”-- De corpo de requisição HTTPlocal stream = req:stream()
-- De filesystemlocal fs = require("fs")local stream = fs.get("app:data"):open("/file.txt", "r")Leitura
Seção intitulada “Leitura”local chunk, err = stream:read(size)| Parâmetro | Tipo | Descrição |
|---|---|---|
size | integer | Bytes para ler (0 = ler tudo disponível) |
Retorna: string, error - nil em EOF
-- Ler todos os dados restanteslocal data, err = stream:read_all()Escrita
Seção intitulada “Escrita”local bytes, err = stream:write(data)| Parâmetro | Tipo | Descrição |
|---|---|---|
data | string | Dados para escrever |
Retorna: integer, error - bytes escritos
Seeking
Seção intitulada “Seeking”local pos, err = stream:seek(whence, offset)| Parâmetro | Tipo | Descrição |
|---|---|---|
whence | string | "set", "cur" ou "end" |
offset | integer | Offset em bytes |
Retorna: integer, error - nova posicao
Flushing
Seção intitulada “Flushing”local ok, err = stream:flush()Flush de dados em buffer para armazenamento subjacente.
Informacoes do Stream
Seção intitulada “Informacoes do Stream”local info, err = stream:stat()| Campo | Tipo | Descrição |
|---|---|---|
size | integer | Tamanho total (-1 se desconhecido) |
position | integer | Posicao atual |
readable | boolean | Pode ler |
writable | boolean | Pode escrever |
seekable | boolean | Pode fazer seek |
Fechando
Seção intitulada “Fechando”local ok, err = stream:close()Fechar stream e liberar recursos. Seguro chamar multiplas vezes.
Scanner
Seção intitulada “Scanner”Criar um tokenizador para conteudo do stream:
local scanner, err = stream:scanner(split)| Parâmetro | Tipo | Descrição |
|---|---|---|
split | string | "lines", "words", "bytes", "runes" |
Métodos do Scanner
Seção intitulada “Métodos do Scanner”local has_more = scanner:scan() -- Avancar para proximo tokenlocal token = scanner:text() -- Obter token atuallocal err_msg = scanner:err() -- Obter erro se houverwhile scanner:scan() do local line = scanner:text() process(line)endif scanner:err() then return nil, errors.new("INTERNAL", scanner:err())end| Condição | Tipo |
|---|---|
| Tipo whence/split inválido | INVALID |
| Stream fechado | INTERNAL |
| Não legivel/gravavel | INTERNAL |
| Falha de leitura/escrita | INTERNAL |