id3 タグを読み取るために、完全な mp3 ファイルを読み取ろうとしています。そのとき、 file:read("*a") が明らかにファイル全体を読み取っているのではなく、小さな部分を読み取っていることに気付きました。そこで、ファイル全体の内容を取得するために、何らかの回避策を構築しようとしました。
function readAll(file)
local f = io.open(file, "r")
local content = ""
local length = 0
while f:read(0) ~= "" do
local current = f:read("*all")
print(#current, length)
length = length + #current
content = content .. current
end
return content
end
私のテストファイルでは、これは 256 回の読み取り操作が実行され、合計で ~113kB の読み取りが行われたことを示しています (ファイル全体は ~7MB)。ほとんどの id3 タグを読み取るにはこれで十分なはずですが、なぜ Lua がこのように動作するのか疑問に思います (特に、*.obj や *.ase などの大きなテキストベースのファイルを読み取るときはそうではないため)。この動作の説明や、ファイル全体を確実に読み取るための解決策はありますか?