reader

std.io.reader

val ERR_EOF

pub val ERR_EOF: str = "ERR_EOF"

def ReadFun

pub def ReadFun: fun(ptr, *u8, usize) R.Result[usize, str]

读取回调类型

ptr:传递给读取回调的不透明上下文 buf:要读取到的缓冲区 len:最大读取字节数 ret:成功时返回读取的字节数,失败时返回错误消息

rec Reader

pub rec Reader;

通用读取接口

ctx:传递给读取回调的不透明上下文 f_read:读取回调(ctx, buf, len)-> R.Result[usize, str]

fun read

pub fun read(r: *Reader, buf: *u8, len: usize) R.Result[usize, str];

最多读取 len 字节到 buf

r:要读取的 reader buf:要读取到的缓冲区 len:最大读取字节数 ret:成功时返回读取的字节数,失败时返回错误消息

fun read_exact

pub fun read_exact(r: *Reader, buf: *u8, len: usize) O.Option[str];

确切读取 len 字节到 buf

r:要读取的 reader buf:要填充的缓冲区 len:要读取的字节数 ret:失败时返回错误

fun read_all

pub fun read_all(a: *A.Allocator, r: *Reader) R.Result[Vector[u8], str];

读取直到 EOF 到缓冲区中,返回总读取字节数

a:要使用的分配器 r:要读取的 reader ret:成功时返回 Ok(total),失败时返回 Err(str)

fun read_str

pub fun read_str(a: *A.Allocator, r: *Reader) R.Result[str, str];

读取直到 EOF 并将内容作为以空字符结尾的字符串返回

零拷贝:向量的缓冲区原地终止并成为返回的字符串,因此永远不会在这里释放。从 arena 分配,或者接受只有整体回收缓冲区容量。

a:要使用的分配器 r:要读取的 reader ret:作为字符串的内容,或错误消息