File 如何在lua中读取大文件(gig或更多)?

File 如何在lua中读取大文件(gig或更多)?,file,memory,lua,File,Memory,Lua,我一直在寻找这个问题的答案,每个人的答案都是一行一行地做,但问题是我的文件只有一行字符,尝试io.open(“file.txt”,“rb”):read(“*a”)会导致内存错误。我想不出如何一次加载一部分,因为正如我所说,这是一条巨大的线。您可以使用io.read(size)读取指定大小的缓冲区(如评论中所述)。看到了吗 由于您在阅读的块中进行搜索,因此您正在搜索的字符串可能会在不同的块之间分割,因此您需要考虑这一点。可能会感兴趣。您可以使用表作为缓冲区: function readFile(f

我一直在寻找这个问题的答案,每个人的答案都是一行一行地做,但问题是我的文件只有一行字符,尝试io.open(“file.txt”,“rb”):read(“*a”)会导致内存错误。我想不出如何一次加载一部分,因为正如我所说,这是一条巨大的线。

您可以使用
io.read(size)
读取指定大小的缓冲区(如评论中所述)。看到了吗


由于您在阅读的块中进行搜索,因此您正在搜索的字符串可能会在不同的块之间分割,因此您需要考虑这一点。可能会感兴趣。

您可以使用表作为缓冲区:

function readFile(file)
local t = {}
 for line in io.lines(file) do
    t[#t + 1] = line .. "\n"
end
  local s = table.concat(t)
  return s
end

使用
:read(4096)
或类似于在固定大小的块中读取的方法如何?这基本上与string.sub的工作原理相同,但用于读取文件,如果是的话,这正是我所需要的。不一样,因为它本身是按顺序读取的。与
:seek(“set”,start)
协同工作,您可以对文件执行与字符串
.sub
相同的操作。在任何编程语言中,您必须首先
查找文件中的某个位置,然后
读取一定数量的字节。数据本身不被认为是“字符串”,而只是一个字节块。(据我回忆,Lua不支持“内存映射文件”的概念。)你能给我举个例子吗,比如让我们假设文件有1000个字符长(不是,长得多,这就是我需要使用这个的原因)我怎么能只抓取500到750个字符