Это будет во многом зависеть от формата файла. Каждый байт в файле может представлять разные вещи, или он может просто представлять значения из большого массива, или их сочетание.
Вам нужно знать, как выглядит формат, чтобы иметь возможность его прочитать, поскольку двоичные файлы не являются самоописательными. Чтение простого объекта может выглядеть как
var authorName = binReader.ReadString();
var publishDate = DateTime.FromBinary(binReader.ReadInt64());
...
Если у вас есть список элементов, обычно используется префикс длины. Что-то вроде
var numItems = binReader.ReadInt32();
for(int i = 0; i < numItems; i++){
var title = binReader.ReadString();
...
}
Затем вы обычно создаете один или несколько объектов из данных, которые можно использовать в остальной части приложения. Т.е.
new Bibliography(authorName, publishDate , books);
Если это формат, который вы не контролируете, надеюсь, у вас есть подробная спецификация. В противном случае это своего рода безнадежное дело для чего-либо, кроме самых сложных решений.
Если данных больше, чем может поместиться в памяти, вам понадобится какой-то механизм потоковой передачи. Т.е. прочитать один элемент, выполнить некоторую обработку элемента, сохранить результат, прочитать следующий элемент и т. Д. c.
Если вы действительно контролируете формат, я бы предложил альтернативы, которыми проще управлять. Я использовал protobuf. * 1020 *, и я считаю его довольно простым в использовании, но есть и другие альтернативы. Обычный способ использования библиотек такого типа - создать класс для данных и добавить атрибуты для полей, которые следует сохранить. Библиотека может управлять сериализацией / десериализацией автоматически и обычно легко справляется с такими вещами, как наследование и изменение формата.