Frage

Ich versuche, Inhalte eines Spiels Karte / Modelldateien in ein Programm für die Zwecke des Schreibens einen kleinen Modell-Viewer und testet einige DirectX-Funktionen zu lesen. Die Modell / Karte Dateiformate sind in der Natur gestückelt, und ich weiß, das Format dieser Dateien. Ich kann leicht die Dateien lesen, indem Sie durch die einzelnen Stücke Parsen, einen Ansatz wie folgt aus:

class FileType1 {
    private Chunk1 c1;
    private Chunk2 c2; // etc

    public void Read(BinaryReader reader) {
        c1 = new Chunk1(reader);
        c2 = new Chunk2(reader);
    }
}

Doch ich versuche, um allgemein lesen diese Dateien irgendeiner Art und Weise zu denken, indem Sie das Format spezifiziert die Datei zu haftet (dh Chunk1 von Chunk2 folgt etc etc), so dass der Leser die Datei sichern kann, ist eine geeignete Struktur . Ich kann ein Chunk Super-Klasse verwenden und eine Chunk Fabrik, um allgemein lesen alle Stücke in einer bestimmten Datei. Im Wesentlichen würde Ich mag diese eine Struktur Validator mit der zusätzlichen Funktionalität erweitern (oder so ähnlich) ähnlich wie dies bei einem Verfahren zur Folge hat:

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);
    }
}

Die Idee dabei ist, dass die ChunkFileFormat Klasse die Struktur der Datei gibt, die angibt, wie Chunk Typ die nächsten an, die aus dem binären Strom sein wird erwartet. Dies würde es ermöglichen Subklassen von ChunkFileFormat das Layout dieser bestimmten Format zu geben, und die einzelnen Leseverfahren zum Lesen aller verschiedenen Chunked Dateiformate verwendet werden könnten, anstatt eine langatmige und sich wiederholende Verfahren für jede zu schreiben.

Meine Frage ist, ist jemand bekannt, der Entwurfsmuster oder Ansätze, die mit dieser Situation umgehen können? Das Projekt arbeite ich an ist derzeit in C #, obwohl ich in Lösungen in C ++ interessieren würde (oder jede Sprache für diese Angelegenheit).

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Diese Art von Regeln sind leicht codiert ein endlichen Automaten .

sollte jeder Chunk den Staat Sie in sind ändern. Jeder Staat danach für bestimmte Brocken warten. Wenn Sie einen Klumpen auftreten, die Sie nicht in der aktuellen begegnen sollte, das ist ein Fehler.

Andere Tipps

Sie könnten eine formale Beschreibung des Formats erstellen mit Datascript / antlr und haben es Parse erstellen und i / o-Code für Sie (Java oder C ++).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top