스트림
스트림
섹션 제목: “스트림”효율적인 데이터 처리를 위한 스트림 읽기/쓰기 작업. 스트림 객체는 다른 모듈(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()스트림을 닫고 리소스를 해제합니다. 여러 번 호출해도 안전합니다.
스캐너
섹션 제목: “스캐너”스트림 콘텐츠를 위한 토크나이저 생성:
local scanner, err = stream:scanner(split)| 파라미터 | 타입 | 설명 |
|---|---|---|
split | string | "lines", "words", "bytes", "runes" |
스캐너 메서드
섹션 제목: “스캐너 메서드”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 |