QIODevice::write
имеет перегрузку для QByteArray
, если это влияет на ваше решение. QDataStream
может стоить посмотреть на большие данные. В конце концов, все зависит от вас, так как различные контейнеры будут работать.
Edit:
Я думаю, что базовый файловый ввод / вывод с использованием любого буфера, который вы предпочитаете, это, вероятно, все, что вам нужно. Используйте такие объекты, как QFile
, QDataStream
, QByteArray
и т. Д. Вы можете читать и обрабатывать только части файла с кольцевыми буферами для экономии памяти, особенно если речь идет о аудио, видео или чем-то, что поддается потокам. Если в файле есть известная структура, такая как XML, CSV и т. Д., Которая также упрощает частичное чтение и обработку, поскольку вы можете переходить строка за строкой или тег за тегом.
Файлы, отображенные в память, используют виртуальную память для достижения более быстрого ввода-вывода путем создания копии файла на диске в сегменте виртуальной памяти, который затем может использоваться приложением, как если бы он был просто памятью процесса. Возможность обрабатывать файл как память процесса позволяет вам выполнять редактирование на месте, что быстрее, чем поиск позиции с начала файла, и быстрее, чем выполнение зависимых от ОС вызовов API и работа с операциями чтения / записи на жестком диске. Как правило, на файлы, отображаемые в память, накладываются значительные накладные расходы, и существуют некоторые возможные ограничения в зависимости от того, как подкачка реализована на вашей целевой платформе или какая архитектура вы используете. В Qt вам придется проектировать свои собственные объекты для использования файлов с отображенной памятью, и исторически я считаю, что системы Linux поддерживают эту функциональность лучше, чем windows.