Наиболее эффективно читать файл в отдельные переменные, используя fstream - PullRequest
0 голосов
/ 14 июля 2011

У меня есть тонны файлов, которые немного похожи на:

12-3-125-BINARYDATA

Какой самый эффективный способ сохранить 12, 3 и 125 как отдельные целочисленные переменные, а BINARYDATA как char-vector?

Мне бы очень хотелось использовать fstream, но я точно не знаю, как это сделать (работало с std::strings, но часть BINARYDATA все испортила).

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Самый эффективный метод для чтения данных - это чтение множества «порций» или записей в память с использованием наименьшего количества вызовов функций ввода / вывода, а затем анализ данных в памяти.

Например, чтение 5 записей одним вызовом fread более эффективно, чем 5 вызовов fread для чтения в записи.Доступ к памяти всегда быстрее, чем к внешним данным, таким как файлы.

Некоторые платформы имеют возможность отображать файл в памяти.Это может быть более эффективным, чем чтение с использованием функций ввода / вывода.Профилирование определит наиболее эффективный.

Записи фиксированной длины всегда более эффективны, чем записи переменной длины.Записи переменной длины включают либо чтение, пока не будет считан фиксированный размер, либо чтение, пока не будет найдено значение терминала (часового).Например, текстовая строка является переменной записью и должна считываться по одному байту за раз, пока не будет найден завершающий маркер конца строки.В этом случае может помочь буферизация.

0 голосов
/ 14 июля 2011

Что вы подразумеваете под двоичными данными?Это 010101000 char по типу char или "реальные" двоичные данные?Если это настоящие «двоичные данные», просто прочитайте файл как двоичный файл.Сначала прочитайте 2 байта для первого целого, следующие 1 байтов для -, 2 байта для 3 и т. Д., Пока вы не прочитаете первую позицию двоичных данных, просто получите длину файла и прочитайте все это.

...