wie ein Archiv gestalten?
-
also, ich arbeite grad an nem archiv, und frag mich, wie ichs intern darstellen soll:
möglichkeit1:
Directory1 Directory2 unterdirektory von 1 Directory3 unterdirectory von 1 Directory4 unterdirectory von 3 File1 member von Directory1 File2 member von Directory1 File3 member von Directory2 File4 member von Directory3
vorteil: richtig schnell wenns ums neu einfügen von dateien geht.
nachteil: lineare suchdauer von dateien,lineare laufzeit bei schreiben in der mitteDirectory1 Directory2 File1 File2 Directory3 Directory4 File3 File4 File5 File6 File7 File8 File9 File10
vorteil: sehr schnelle laufzeit beim suchen von dateien,da riesige blöcke übersprungen werden können
nachteil: lineare laufzeit beim einfügen von dateienjo welche version soll ich nehmen? ich denk nich, dass ich so oft dateien eines archives veränder,und tendier persönlcih zur 2. version, was meint ihr?
-
Imho Zweitens, irgendwie entspricht das mehr dem was es zu Abstrahieren gilt: Einem Dateibaum.
MfG SideWinder
-
Ich würde auch zur 2. Variante tendieren wenn du selber sagst, dass es nicht viel einzufügen gilt. Aber so ganz intuitiv würde ich mal sagen, dass das mit der linearen Laufzeit beim Einfügen von Dateien nicht so ganz stimmt.
-
doch, man kann die dateien ja nich einfach hinten anhängen wie bei version eins, sondern man muss immer so komisch rumschieben
-
Klar kann man das. Die Blätter im Baum beinhalten dann einfach einen Verweis auf die tatsächliche Speicherstelle. Dann hätte man beim Einfügen kein Problem, allerdings müsste man sich dann überlegen was man beim Löschen macht. Da kann man Lücken lassen und bei Gelegenheit auffüllen, oder in O(n) die Daten neu ordnen. Naja, hab grad keine Zeit da großartig drüber nachzudenken. Vielleicht fällt mir ja im Laufe des Tages etwas sinnvolles ein.
-
ich würde auch eher die 2. variante nehmen. die zeiten selbst sind davon abhängig wie das archiv präsentiert wird, ob als Datei oder als Verzeichnisstruktur (sozusagen Oberverzeichnis) mit darin liegenden directories und files.
gruss,
Sebastian
-
zebel schrieb:
ich würde auch eher die 2. variante nehmen. die zeiten selbst sind davon abhängig wie das archiv präsentiert wird, ob als Datei oder als Verzeichnisstruktur (sozusagen Oberverzeichnis) mit darin liegenden directories und files.
gruss,
Sebastiannein, das stimmt nicht, innerhalb einer datei ist die 2. struktur viel langsamer wenns ums einfügen vond ateien geht.
@mastah dann kann ich das archiv gleich so represäntieren, wie in version eins, denn das is ja in etwa das, was du gesagt hast(man müsste nur das directory um einen eintrag erweitern, der angibt wo die einzelnen dateien liegen)
-
so, hab jetzt eine erste klassenstruktur aufm blatt(war doch etwas schwieriger mit den directories als ich dachte):
also,auf der obersten klassenebene sitzt die Klasse Archiv. Archiv kümmert sich prinzipiell nur um die verwaltung und filterung der daten,archiv kann selber keine Daten ausgeben, sondern nur ein handle auf das hauptverzeichnis ausgeben.Archiv selber besitzt 2 policies: ArchivReader und Filter,erstere policy hilft, mit verschiedensten archivtypen und anordnungen klarzukommen, und filter ist ein kompressions/dekompressionsalgorithmus(bzw ver und entschlüsselung).
die zweite klasse is directory. Sie ordnet eigentlich nur die Hierarchie der Daten,und nur sie kann für dateien abgefragt werden.Sie besitzt 3 methoden: getFile, getDirectory, getParentDirectory.
zum schluss die Klasse File: sie unterstützt die klassischen lese/schreib methoden wie den op>>/op<< und read/write
wie fidnet ihr dieses Design? ich finds ziemlich gelungen,aber was ich gut finde ist meistens nich annehmbar für euch
//edit der grund, weshalb ich diese struktur genommen hab, und nicht einfach ne funktion getfile("/blub/hallo.txt"); war, dass ich angenommen hab, dass jemand einfach mehrere dateien gleichzeitig aus einem Ordner brauchen könnte,
und man so den vorgang ein bischen verschnellern könnte, vielleicht werd ich aber auch noch in archive so ein getfile zur verfügung stellen...
-
Hm, wo genau sitzt dann deine Treestruktur, die
dir sagt, wo was genau ist ?
Ist Directory dann ein Knoten, und File die Blätter ?
Und wo schreibst du das Archiv selber, wenn File die einzelnen
Dateihandels darstellt ?Devil
-
die treestruktur ansich existiert garnicht,archiv stellt das handle auf die datei da, und die policy "Archivreader" stellt die nötigen algorithmen zu verfügung,was mir auch ermöglichen kann, archive mit anderen anordnungen verarbeiten zu können.
mithilfe der von der policie bereitgestellten funktionen kann ich dann aus dem archiv lesen,meine directories abfragen, meine dateien abfragen usw.
die baumstruktur wird also nurnoch durch interfaces dargestellt,ist also weggekapselt,mich als durchschnittsdau brauchs nichmehr zu intressieren, ob die daten linear, als baum oder linsensuppe gespeichert werden, ich frag ein directory ab(der algorithmus garantiert, das sogar in einem archiv ohne directories, das archiv als main directorie dargestellt werden kann),danach die files, map sie dann-fals gebraucht-in den speicher, und fertig.