Решение 1 - Супер быстрая, но небезопасная:
- Создайте свой класс с помощью
[StructLayout(LayoutKind.Sequential)]
и всех других неуправляемых маркировок кода для длины.Ваши строки будут массивом char, но после загрузки могут быть представлены в виде строки. - Прочитать 180 байтов и создать байтовый массив того же размера внутри
fixed
блока - Изменить указатель на
IntPtr
и используйте Marshal.PtrToStructure()
для загрузки объекта вашего класса
Решение 2 - Загрузка логики в классе:
- Создание конструктора вваш класс, который принимает
byte[]
и внутри объектов, используя Covenrt.Toxxx
или Encoding.ASCII.ToString()
, предполагая, что это ASCII - Прочитайте 180 байтов и создайте объект и передайте его .ctor
- Если вынеобходимо выполнить сериализацию обратно до
byte[]
, затем реализовать метод ToByteArray () и снова использовать Covenrt.Toxxx
или Encoding.ASCII.ToString()
для записи в байты.
Улучшение решений 2:
Создайте пользовательские атрибуты и украсьте ваши классы так, чтобы у вас была фабрика, которая считывает метаданные и раздувает ваши объекты, используя для вас байтовый массив.Это наиболее полезно, если у вас есть более пары таких классов.
Альтернатива решениям 2:
Вы можете передавать поток вместо байтового массива, который быстрее,Здесь вы должны использовать BinaryReader и BinaryWriter для чтения и записи значений.Строки, однако, немного хитрые, так как, я думаю, они также записывают длину.