이것은 이 해킹하는 방식입니다. 그것은 "해킹"접근이지만 더 정교해질 수 있도록 확장 될 수 있습니다. 당신 것, 이기종 블록
f.fileversion = read(sizeof(f.fileversion))
f.offsetlen = read(sizeof(f.offsetlen))
f.numblocks = read(sizeof(f.numblocks))
for i in f.numblocks
f.blocks[i] = read(f.offsetlen)
을 -
struct file
{
int32 fileversion; //different parsers, one for each file version
int offsetlen; //length of blocks
int numblocks; //number of blocks
int* fileoffsets; //this array has internal offsets, corresponding to blocks
block* blocklist; //blocks.
};
struct block
{
//stuff here of a fixed length
};
이 고정 된 크기의 블록을 가진 파일을 작성하려면, 알고리즘은 다음과 같이 될 것이다 -
write(f.fileversion)
write(f.offsetlen)
write(f.numblocks)
for i in f.blocklist
write(f.blocklist[i])
및 읽기 읽는 동안 오프셋을 추적해야합니다.
* 데이터 * 또는 * 유형 *의 다른 버전을 의미합니까? – Beta
다른 버전의 데이터. 실제로 omnitarius가 프로토콜 버퍼를 사용한다고 생각하는 것과 정확히 일치합니다. – kamziro