【发布时间】:2010-11-28 01:10:32
【问题描述】:
我正在尝试将游戏地图/模型文件的内容读取到程序中,以便编写一个小型模型查看器并测试一些 DirectX 功能。模型/地图文件格式本质上是分块的,我知道这些文件的格式。我可以通过解析各个块来轻松读取文件,使用如下方法:
class FileType1 {
private Chunk1 c1;
private Chunk2 c2; // etc
public void Read(BinaryReader reader) {
c1 = new Chunk1(reader);
c2 = new Chunk2(reader);
}
}
但是,我正在尝试通过指定文件遵循的格式(即 Chunk1 后跟 Chunk2 等),想出一些通用读取这些文件的方法,以便读者可以确保文件具有适当的结构.我可以使用 Chunk 超类和 Chunk 工厂来一般地读取任何给定文件中的所有块。本质上,我想用结构验证器(或类似的东西)的附加功能来增强它,以产生类似于这样的方法:
public void Read(BinaryReader reader, ChunkFileFormat format) {
while (!EOF) {
char[] chunkID = reader.ReadChars(4);
Chunk c = chunkFactory.Create(chunkID);
if (c.GetType() != format.Next.GetType())
throw new Exception("File format is invalid");
format.SetCurrentRecord(c);
}
}
这里的想法是,ChunkFileFormat 类指定了文件的结构,指示预期从二进制流中读取的下一个块类型。这将允许 ChunkFileFormat 的子类指定特定格式的布局,并且单个读取方法可用于读取所有不同的分块文件格式,而不是为每个格式编写冗长且重复的方法。
我的问题是,是否有人知道可以处理这种情况的设计模式或方法?我正在从事的项目目前使用 C#,尽管我会对 C++(或任何语言)中的解决方案感兴趣。
提前致谢!
【问题讨论】: