2013-04-20 3 views
1

나는이 구조체 일치하는 형식으로 이진 데이터를 포함하는 파일이 있습니다 항목의 숫자가있을 수읽기 이진 데이터

struct MyStruct { 
    UInt32 count; 
    UInt32[] items; 
} 

바이너리 데이터 길이 될 수 있지만, 항목 수는 개수로 정의됩니다. Marshal.PtrToStructure을 사용하면 항목 수가 가변적 인이 바이너리 형식을 허용하지 않는 것 같습니다. 속성을 사용하면 항목 배열의 크기를 설정할 수 있지만 상수가되어야합니다. 데이터를 읽는 동안 count을 보도록 지시 할 방법이 없습니까?

XML에서 형식을 정의하고이를 사용하여 구조체에 코드를 읽는 방법을 생각해 보았습니다. 그러나 파일 형식이 변경되면이 코드는 많은 중복 데이터가됩니다. 구조체가 아니라 XML과 구조체.

items 필드에서 사용자 지정 특성을 사용하고 데이터를 읽으려는 자신의 코드를 작성했지만 구조체의 필드를 열거하기 위해 Reflection을 사용해야한다고 생각했습니다. 느린가?

(나는 또한 수동으로 나 자신을 읽을 수 있지만 질문에 대한 구조체를 손질하고, 읽기 코드를 변경할 필요가 없습니다 좋아 한 경우 구조 변경) 인스턴스에

+0

나는 여분의 오버 헤드 (구문 분석 및 파일 크기 때문에) 때문에 XML을 피하고자한다고 가정합니다. 한 줄에 할 수있는이'MyStruct' 10000을 포함하는 XML 파일을 구문 분석 :. '목록 데이터 = (목록 ) 새로운 XmlSerializer를 (대해서 typeof (목록 을)) (File.OpenText ("MyStructs 역 직렬화. xml ")); ' –

+0

데이터는 기존 바이너리 파일이므로 데이터 저장 방법을 제어 할 수 없습니다. –

답변

0

사용 .Read() 방법 Stream, byte[]으로 읽은 다음 System.BitConverter.ToUInt32(bytearray, startindex)을 사용하여 이진 데이터를 uint32 형식으로 가져옵니다.

+0

데이터를 읽는 데 문제가 없습니다. 정보 복제를 줄이고 느리지 않으며 형식이 바뀌면 해당 데이터를 읽는 코드를 변경하지 않아도 데이터를 읽는 방법입니다. –