Это сильно зависит от того, что вы пытаетесь сделать. В этом случае существуют компромиссы для каждого решения.
Исходя из дополнительной информации, которую вы предоставили в комментариях, лучшее решение, которое я могу придумать в этом случае, - это запись сортировка ваше лицо "сеансы "на файл. Тем не менее, для достижения этой цели необходимо выполнить некоторые дополнительные действия.
- Создайте класс с именем
Frame
, создайте другой класс с именем Record
, который имеет List<Frame> frames
. Таким образом, вы можете поместить любую информацию, которую хотели бы захватить в каждом кадре, в качестве атрибутов в классе Frame
. - Поскольку вы не можете маршалировать универсальный тип, вам придется маршалировать каждый кадриндивидуально. Я предлагаю реализовать метод в
Record
классе, называемый MarshalRecording()
, который обрабатывает это для вас. - Однако при этом вам будет сложно разобрать ваши записи, поскольку они могут иметь разные размеры в двоичном виде. form, и у них не будет разделителя, указывающего, где заканчивается кадр и где начинается следующий кадр. Я предлагаю добавлять информацию о размере в начале каждого маршаллированного фрейма, чтобы вы могли демаршировать все фреймы, даже если они имеют разные размеры.
Как @PiotrK указал в своем ответеВы можете использовать protobuf . Тем не менее, я не рекомендую его для вашего конкретного использования. Лично я думаю, что это излишне (слишком много работы для слишком маленьких результатов, protobufs может быть PITA несколько раз).
Если вас беспокоит размер хранилища, вы можете LZ4 в целомвещь (если вы объединяете двоичную информацию в памяти) или LZ4 для каждого кадра (если вы обрабатываете каждый кадр отдельно, а затем добавляете его в файл). Я рекомендую последний, потому что, в зависимости от количества кадров, у вас может не хватить памяти, пока вы распаковываете свою запись.
Ps: Никогда не используйте XML, это злокачественно!