Я пытаюсь прочитать полный mp3-файл, чтобы прочитать теги id3. Тут-то я и заметил, что файл :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 операций чтения, всего читается ~113 КБ (, весь файл ~7МБ ). Хотя этого должно быть достаточно для чтения большинства тегов id3, мне интересно, почему Lua ведет себя таким образом (, особенно потому, что это не так при чтении больших текстовых файлов, таких как *.oj или *.ase ). Есть ли какое-либо объяснение этому поведению или, может быть, решение для надежного чтения всего файла?