Всем доброго времени суток!
Решил я тут на днях позаниматься немного программизмом, причем не для работы, а так, для себя, точнее для своего телефона ;). Стояла такая задача — загрузить из бинарного файла массив float'ов, причем сделать это максимально эффективно в плане быстродействия (под телефон же все-таки).
Оказалось, что в дотнете сделать это не так-то просто. Есть 2 пути — первое — это использовать BinaryReader и в цикле считывать из файла числа, и второй — прочитать весь файл в массив байт (byte[]) и потом из него копировать во float[]. И оба этих варианта меня понятное дело не устроили — первый потому что это медленно (насколько именно я не замерял конечно, но даже на вызовы функций уйдет время довольно приличное, если большое количество чисел надо прочитать), а второй — потому что это займет двойной объем памяти — сначала под массив байт, потом под массив float'ов.
Идеальным вариантом было бы конечно прочитать сразу все данные файла в массив байт и потом просто привести его к float[], тогда и прочитаем быстро и памяти лишней не сожрем. Но в дотнете этого сделать нельзя!
var file = new FileStream("myfile.bin", FileMode.Open);
byte[] data = new byte[40000];
file.Read(data, 0, 40000);
float[] numbers = (float[])data; // Вот так было бы очень здорово конечно, но к сожалению нельзя... :(
(
Читать дальше
)