09. oktober 2002 - 22:06Der er
19 kommentarer og 1 løsning
TMemorystream
Hej.
TMemorystream class'en i delphi er svaret på mit problem med undtagelse af een ting.
Jeg har brug for at kunne læse et antal bytes fra starten af stream'en, for herefter at smide dem væk uden at skade resten af de data, der end måtte være i den stream.
Jeg er klar over, at den mulighed ikke eksisterer i forevejen, så man må nok blive nødt til at lave en ny class, der nedarver fra tmemorystream.
Kan nogen finde noget kode eller konstruere et eksempel på sådan en udvidelse?
Man er nødt til at lave en ny klasser, der nedarver fra TMemorystream, der offentligører en MySetPointer funktion, der kalder SetPointer fra TCustomMemoryStream.
Det har jeg også fået til at virke fint nok, men når jeg prøver at frigøre den hukommelse, der nu er ledig, kommer den med en exception, EInvalidPointerOperation.
Så vidt jeg kan se prøver du blot at læse de 10 første bytes ind i en TMemo. Når du har kald Read har du flyttet din ReadPointer. Præcis som i en fil hvor det blot er fil pointeren du flytter ....
andet del af problemet er jo også, at i een samhæng, hvor dll'en bruges, er det måske små 10 k. "pakker", den skal samle og i en anden er det måske flere GB.
Jeg er helt ny her, så måske er der jeg noget jeg hat misforstået, men når jeg ser Jens B konstruere en klasse for at løse dette problem så bliver jeg forvirret.
Hvad er der galt med at bruge TMemoryStream.Position := ønsket offset ?
Problemet er, at der vil blive optaget unødig hukommelse, hvor når dataene er læst, skal de i dette tilfælde ikke bruges længere.
Samhængen det skal bruges i er, at den skal samle data ind fra netværket asynkront, dvs. mens programmet fortsætter sin normale gang.
Hvis man forestiller sig, at man skal modtage 1 gb., er det for meget hukommelse det program skal bruge - derfor må den deallokere undervejs i takt med at dataene bliver læst.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.