einen "life stream" aus komprimierten/nicht komprimierten dateien erstellen?
-
also, ihr kennt ja sicher Winzip und andre dateien,die ihren inhalt gepackt/nicht gepackt enthalten,die struktur innerhalb sieht ja in etwa soa us:
Header|Datei|Header|Datei|Header|Datei
wenn man nun solche dateien hat,erstellt man sich ja normalerweise virtuelle Dateien, die die Datei(dekomprimiert,falls sie komprimiert wurde) enthält.wenn man nun funktionen hat, die mittels pointer auf diese virtuellen Dateien zugreifen können, ist das kein problem.
Das problem kommt erst, wenn der pc wenig ram hat.
Es ist schon sehr unschön, wenn der PC 256mb ram hat,von denen man 200mb allein für die virtuellen Dateien verwendet,das ganze macht dann sicher nichmehr viel spaßAlso hab ich mir überlegt,eine Art stream zu erstellen, der genauso behandelt werden kann, wie eine virtuelle datei, dazu gehört unter andrem auch, dass man mittels eines pointers auf diese Datei zugreifen kann,und wenn der pointer dann verschoben wird,sich der stream dann auch gleichzeitig neu ausrichtet.
da man pointer ansich nicht überladen kann,gibt es da natürlich wieder ein großes problem,und dass der pointer selber vom typ void* sein muss, erledigt sein übriges,denn das problem liegt darin zu erkennen, wann der pointer verschoben wird,und wieweit.
Ein zweiter ansatz war,einen pointer auf diesen datenpointer zu erstellen,der den sinn haben sollte, mir mitzuteilen, worauf der datenpointer zum zeitpunkt des zugriffs durch eine beliebige funktion x zeigt.
Alles kein problem, nur weis ich nicht, wie ich testen kann,wann auf den pointer zugegriffen wird.das dritte und warscheinlich schwerwiegendste problem ist aber, dass ich bisher nur vermuten kann, wie der pointer von den funktionen verwendet wird,da ich zb von DirectX funktionen den qc nich kenne,ob mithilfe dieses pointers selbst ein stream aufgebaut wird,ob der pointer wie oben beschrieben einfach verschoben wird, oder ob auf die nachfolgenden datenelemente durch andere pointer zugegriffen wird.
hat vielleicht jemand eine Idee,wie man das anstellen kann?
-
otze schrieb:
hat vielleicht jemand eine Idee,wie man das anstellen kann?
ne. was willst du machen
-
ok, hier mal die absolute kurzform der fragen:
gibt es vielleicht einen weg, die operatoren so zu überladen,dass sich eine operation zur verschiebung eines pointers sich nicht auf den pointer, sondern auf eine eigens dafür reservierte variable auswirkt?
-
keine ahnung was du meinst.
ich hab das ganze mit dem pointer nicht verstanden - wozu dann streams?irgendwie habe ich das gefühl, dass du dir einen eigenen stream schreiben willst. nur verstehe ich nur bahnhof.
-
ja ich will nen eignen stream schreiben.
Der stream soll einen Datenpointer erstellen, der nicht auf die datei zeigt, sondern auf das letzte vom stream ausgelesene Byte.
Dafür ist es wichtig, dass der pointer selber nicht in der position verändert werden darf, da er sonst ja nichmehr auf das Byte ausgerichtet ist.
versuche der positionsveränderungen des Datenpointers sollen im gegenteil aber damit enden, dass nur der interne lesezeiger verändert wird.Der pointer wird gebraucht, damit man mit ihm wie mit einer virtuellen datei arbeiten kann,also einer Datei die nur im speicher existiert.
Dieser stream soll also sone art speicherplatzsparmaßnahme für schlechte zeiten sein,oder für große dateien,die nur selten geladen werden müssen, wie zb sound dateien.
Ein weiterer grund für den stream ist es,dass man auf komprimierte dateien welche in archiven liegen, keinen einfachen zugriff erhalten kann, ohne sie in irgendeiner Form zu dekomprimieren-entweder als normale datei auf der festplatte oder als virtuelle datei im ram-wobei mir der ram lieber ist, da ich ja ein archiv benutze, damit die leute nich so einfach an die daten kommen :D.falls mein problem wie oben geschildert lösbar ist,wie stehts dann mit folgendem problem:
//streamzeiger ist der zeiger der von dem stream übergeben wird void* neuerzeiger=streamzeiger+1; Dateibyte=*neuerzeiger;//das würde in undefiniertem verhalten enden, da der zeiger ja nicht wirklich auf die datei zeigt
-
eine frsge: kann man pointer überladen? ich bin mir nämlich nichmehr so ganz sicher, da in der bcb hilfe nur was von .* operatoren gesagt wurde..
-
eine frsge: kann man pointer überladen?
Ne also Types kann nicht überladen, höchstens Operatoren und da geht jeder bis auf:
- .
- ,
- ? :
- sizeof
typeid glaub ich geht auch nicht, bin mir aber nicht sicher. Den Dereferenzirungs * und -> kann man überladen (Beide sind unaray! letzterer gibt ein pointer zurück).
Wenn jemand eine gute Erklärung kenn wie man streams selber machen kann, also das ganze streambuf Zeugs, wäre der dann so nette und könnte den Link posten, ich versuch das jetzt schon seit einiger Zeit zu verstehen aber irgendwie hat es noch nicht klick gemacht
.
Danke.