第一版是針對 Lua 5.0 所撰寫的。雖然在很大程度上仍然適用於後續版本,但仍有一些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買這本書,您也同時協助支援 Lua 專案


21.2.1 – 一個小效能技巧

通常,在 Lua 中,一次讀取整個檔案比逐行讀取要快很多。不過,有時我們會遇到一些大檔案(例如,數十或數百 MB),一次讀取所有內容並不合理。如果您想要以最佳效能處理此類大檔案,最快的做法是將其讀取為合理大小的區塊(例如,每個 8 KB)。為避免在中間中斷行,您只需要求讀取一個區塊加上一行

    local lines, rest = f:read(BUFSIZE, "*line")
變數 rest 會取得區塊中斷的任何行的剩餘部分。然後,我們將區塊和這行剩餘部分串接起來。如此一來,產生的區塊將會永遠在行界線上中斷。

這個技巧的一個典型範例是這個 wc 的實作,一個用來計算檔案中字元、字詞和行的數量

    local BUFSIZE = 2^13     -- 8K
    local f = io.input(arg[1])   -- open input file
    local cc, lc, wc = 0, 0, 0   -- char, line, and word counts
    while true do
      local lines, rest = f:read(BUFSIZE, "*line")
      if not lines then break end
      if rest then lines = lines .. rest .. '\n' end
      cc = cc + string.len(lines)
      -- count words in the chunk
      local _,t = string.gsub(lines, "%S+", "")
      wc = wc + t
      -- count newlines in the chunk
      _,t = string.gsub(lines, "\n", "\n")
      lc = lc + t
    end
    print(lc, wc, cc)