나는이 구조체 일치하는 형식으로 이진 데이터를 포함하는 파일이 있습니다 항목의 숫자가있을 수읽기 이진 데이터
struct MyStruct {
UInt32 count;
UInt32[] items;
}
바이너리 데이터 길이 될 수 있지만, 항목 수는 개수로 정의됩니다. Marshal.PtrToStructure
을 사용하면 항목 수가 가변적 인이 바이너리 형식을 허용하지 않는 것 같습니다. 속성을 사용하면 항목 배열의 크기를 설정할 수 있지만 상수가되어야합니다. 데이터를 읽는 동안 count
을 보도록 지시 할 방법이 없습니까?
XML에서 형식을 정의하고이를 사용하여 구조체에 코드를 읽는 방법을 생각해 보았습니다. 그러나 파일 형식이 변경되면이 코드는 많은 중복 데이터가됩니다. 구조체가 아니라 XML과 구조체.
items
필드에서 사용자 지정 특성을 사용하고 데이터를 읽으려는 자신의 코드를 작성했지만 구조체의 필드를 열거하기 위해 Reflection을 사용해야한다고 생각했습니다. 느린가?
(나는 또한 수동으로 나 자신을 읽을 수 있지만 질문에 대한 구조체를 손질하고, 읽기 코드를 변경할 필요가 없습니다 좋아 한 경우 구조 변경) 인스턴스에
나는 여분의 오버 헤드 (구문 분석 및 파일 크기 때문에) 때문에 XML을 피하고자한다고 가정합니다. 한 줄에 할 수있는이'MyStruct' 10000을 포함하는 XML 파일을 구문 분석 :. '목록 데이터 = (목록 ) 새로운 XmlSerializer를 (대해서 typeof (목록 을)) (File.OpenText ("MyStructs 역 직렬화. xml ")); ' –
데이터는 기존 바이너리 파일이므로 데이터 저장 방법을 제어 할 수 없습니다. –