Table of Contents

Buffer(缓冲) API

buffer库提供了便于使用的IO流。本库提供的流更像是io库提供的,由io.open返回的流,不像filesystem.open返回的原始流,后者支持的方法没有前者那么多。下文实例方法板块列出的方法也可用于从io.open函数获取的文件句柄,因此就算你没打算构建自定义带缓冲流,此API文档也会大有裨益。

此外,该API还能让你创建带缓冲流。你需要提供后端的流式读取和流式写入,buffer库提供数据缓冲与格式化。一般而言,用户无需构建自己的带缓冲流。以备参考,io库就使用了带缓冲流(包含文件io和控制台io)。

静态方法

下列方法从buffer库自身调用。

实例方法

下列方法只能在buffer.new创建的实例上调用(注意:io.open返回的文件句柄也是buffer.new创建的带缓冲流)。这些方法均为实例方法,需要实例调用符号:。为了有助于区分这些实例方法与静态方法(例如buffer.new),这些方法名将会加上b:作为前缀。

snippet.lua
local file = io.open("/tmp/foo.txt", "w")
file:write("abc", "def", "\n")
file:close()
-- foo.txt中现在的内容为"abcdef\n"
snippet.lua
local file = io.open("/tmp/foobar.txt")
for line in file:lines() do
  process_next_line(line)
end
file:close()
snippet.lua
local file = buffer.new("r", { read = function() os.sleep(5) return "a" end })
file:setvbuf("full", 1) -- 将缓冲区大小设定为1字符
file:setTimeout(1) -- 将缓冲超时时间设定为1秒
-- 在尝试读取第二个字符之前就会超时
local a, b = file:read(1, 1) --读取一个字符,紧接着再读取一个字符

接口方法

下列方法应当在打算传给buffer.new的带缓冲IO流上实现。

样例

目录