为多个文件 formats/headers 设计文件 reader
Designing file reader for multiple file formats/headers
我正在尝试设计一个 Reader
class,它将能够读取多种文件类型(主要是某种东西的二进制表示)。
要从文件中获取所有元数据,它将使用 Header
class 这将以某种方式告诉 Reader
class 文件 header 的大小,(也许通过静态字段,idk) num 字节读取并在第一次读取时传递给 header。 Header class 会相应地解析一个header,并会提供一些像std::size_t getChunkSize()
的抽象方法。然后,header class 将告知每个数据块的 reader 字节数。这就是我的想法。我怎样才能正确地表示这个层次结构或者有更好的方法来做到这一点?
通常,为二进制格式实现通用 Reader
class 可能非常具有挑战性。
由于某些文件格式的长度可变 headers 我建议将 header 的读数完全放入 Header
class 中。
类似于:
struct Header {
virtual size_t parse(uint8_t* buf, size_t len) = 0;
virtual int getNumChunks() const = 0;
virtual size_t getChunkSize(int chunk) = 0;
}
然后在你的 Reader
class 中你可以有一个读取方法,它首先解析 Header
然后根据块大小读取文件的其余部分。获取块开始的偏移方法对于某些文件格式也很有帮助。根据您要解析的文件格式,如果没有块 headers 并且您在这些块中有可变长度数组,则实际确定块大小也可能存在问题。因此,最好还实现 Chunk
class 来读取所有块。
我正在尝试设计一个 Reader
class,它将能够读取多种文件类型(主要是某种东西的二进制表示)。
要从文件中获取所有元数据,它将使用 Header
class 这将以某种方式告诉 Reader
class 文件 header 的大小,(也许通过静态字段,idk) num 字节读取并在第一次读取时传递给 header。 Header class 会相应地解析一个header,并会提供一些像std::size_t getChunkSize()
的抽象方法。然后,header class 将告知每个数据块的 reader 字节数。这就是我的想法。我怎样才能正确地表示这个层次结构或者有更好的方法来做到这一点?
通常,为二进制格式实现通用 Reader
class 可能非常具有挑战性。
由于某些文件格式的长度可变 headers 我建议将 header 的读数完全放入 Header
class 中。
类似于:
struct Header {
virtual size_t parse(uint8_t* buf, size_t len) = 0;
virtual int getNumChunks() const = 0;
virtual size_t getChunkSize(int chunk) = 0;
}
然后在你的 Reader
class 中你可以有一个读取方法,它首先解析 Header
然后根据块大小读取文件的其余部分。获取块开始的偏移方法对于某些文件格式也很有帮助。根据您要解析的文件格式,如果没有块 headers 并且您在这些块中有可变长度数组,则实际确定块大小也可能存在问题。因此,最好还实现 Chunk
class 来读取所有块。