我正在尝试将游戏地图/模型文件的内容读入程序,以编写一个小型模型查看器并测试一些DirectX功能。这些模型/地图文件格式是分块的,我知道这些文件的格式。我可以通过解析每个块来轻松读取文件,使用像这样的方法:
这里的想法是ChunkFileFormat类规定了文件结构,指示二进制流中下一个要读取的块类型。这使得ChunkFileFormat的子类可以指定特定格式的布局,而单个读取方法可用于读取所有不同的分块文件格式,而不是为每个格式编写冗长和重复的方法。
我的问题是,是否有人知道处理这种情况的设计模式或方法?我正在使用C#进行项目开发,但我也对C++(或任何其他语言)的解决方案感兴趣。
提前感谢!
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++(或任何其他语言)的解决方案感兴趣。
提前感谢!