Означает ли «открытие файла» загрузку его полностью в память? - PullRequest
1 голос
/ 01 мая 2010

Есть функция AudioFileOpenURL, которая открывает файл. С AudioFileReadPackets этот файл доступен для чтения пакетов. Но одна вещь, которая застревает в моем мозгу: действительно ли AudioFileOpenURL загружает всего монстра в память? Или это легкая операция?

Так можно ли считывать данные из файла, только из определенной части, не имея целых терабайт содержимого в памяти?

Ответы [ 4 ]

2 голосов
/ 01 мая 2010

Загружает ли AudioFileOpenURL весь монстр в память?

Нет, он просто получает указатель файла.

Или это легкая операция?

Да, довольно легкий. Просто требуется поиск файловой системы.

Так можно ли считывать данные из файла, только определенной части, не имея целых терабайт содержимого в памяти?

Да, вы можете использовать fseek, чтобы перейти к определенной точке в файле, затем fread, чтобы прочитать ее в буфер (или AudioFileReadBytes).

1 голос
/ 01 мая 2010

AudioFileOpenURL примет open(2) файл и прочитает необходимую информацию (4096 байт), чтобы определить тип аудио.

open(2) не загружает весь файл в оперативную память.

(AudioFileOpenURL - это API C, а не Objective-C.)

1 голос
/ 01 мая 2010

Я не знаю о target-c, но на большинстве языков вы открываете файл, и это только дает вам возможность ТОГДА получить доступ к содержимому с помощью операции READ. В вашем случае вы можете выполнить SEEK, чтобы переместить указатель файла в нужное место, а затем прочитать необходимое количество байтов.

1 голос
/ 01 мая 2010

Нет, он не загружает весь файл в память. «Открывает файл» возвращает вам дескриптор, позволяющий вам читать или записывать в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...