Чтение целых файлов в Lua

Я пытаюсь прочитать полный 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 ). Есть ли какое-либо объяснение этому поведению или, может быть, решение для надежного чтения всего файла?

18
задан Henrik Ilgen 30 April 2012 в 15:56
поделиться