/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Stream?
Fra : Peter


Dato : 06-12-06 14:56

Hej

Nogen der kan forklare hvad stream egentlig benyttes til, jeg tænker på at
man kan streame en tekst med f.eks. Indy´s TCP komponent, og mange andre
komponenter har også mulighed for at streame f.eks. også når man henter og
gemmer filer.
Hvad er forskellen på at streame og så bare at benytte f.eks. en SaveToFile
funktion eller at streame med Indy i stedet for bare at benytte SendText,
SendBuffer osv.?

/HK



 
 
Brian Andersen \(www~ (07-12-2006)
Kommentar
Fra : Brian Andersen \(www~


Dato : 07-12-06 08:57

> Nogen der kan forklare hvad stream egentlig benyttes til, jeg tænker på at
> man kan streame en tekst med f.eks. Indy´s TCP komponent, og mange andre
> komponenter har også mulighed for at streame f.eks. også når man henter og
> gemmer filer.
> Hvad er forskellen på at streame og så bare at benytte f.eks. en
> SaveToFile funktion eller at streame med Indy i stedet for bare at benytte
> SendText, SendBuffer osv.?
>
Hhhmmm. Hvordan skal man forklare det? I teorien kan man betragte alt som en
Stream. Sender du en tekst streng via SendText, så Stream'er du efter min
mening også.

Det smarte ved TStream klassen er, at Borland har indkapslet en hel masse
brugbar funktionalitet (generalisering). Ved at udvidde denne klasse, så kan
du få en klasse som Stream'er til Hukommelsen, til fil eller som komprimere
det indhold du fodre Stream'en med. Komprimering er jo ret smart, hvis du
vælger at sende indholdet af Stream'en via Indy.

Noget andet du skal betragte er Polymorfi. Det vil sige, at har du først
skrevet noget funktionalitet som benytter TStream klassen, så kan du bruge
en hvilket som helst stream. Et eksempel kunne være SendStream(AStream:
TStream); Alle klasse der er nedarvet fra TStream kan bruges som den
Aktuelle parameter. Et par eksempler kunne være:

SendStream(MyZipStream);
SendStream(MyArjStream);
SendStream(MyCabStream);
SendStream(MyMemoryStream);
Etc.

Her er metoden SendStream lige glad med hvilken Stream den benytter. Den
anvender blot den generaliserede adfærd, som er blevet implementeret i
TStream klassen.

Jeg har ikke lige læst det jeg har skrevet igennem, da jeg har lidt travlt
på arbejdet. Hvis det er uforståligt, så håber jeg da, at du har fået lidt
ud af det alligevel. Skriv eventuelt, hvis du har nogle spørgsmål.

/Brian



Peter (07-12-2006)
Kommentar
Fra : Peter


Dato : 07-12-06 09:59

"Brian Andersen (www.europeansoftwarehouse.com)" <x@x.x> skrev i en
meddelelse news:IOPdh.6$r46.1@news.get2net.dk...
>> Nogen der kan forklare hvad stream egentlig benyttes til, jeg tænker på
>> at man kan streame en tekst med f.eks. Indy´s TCP komponent, og mange
>> andre komponenter har også mulighed for at streame f.eks. også når man
>> henter og gemmer filer.
>> Hvad er forskellen på at streame og så bare at benytte f.eks. en
>> SaveToFile funktion eller at streame med Indy i stedet for bare at
>> benytte SendText, SendBuffer osv.?
>>
> Hhhmmm. Hvordan skal man forklare det? I teorien kan man betragte alt som
> en Stream. Sender du en tekst streng via SendText, så Stream'er du efter
> min mening også.
>
> Det smarte ved TStream klassen er, at Borland har indkapslet en hel masse
> brugbar funktionalitet (generalisering). Ved at udvidde denne klasse, så
> kan du få en klasse som Stream'er til Hukommelsen, til fil eller som
> komprimere det indhold du fodre Stream'en med. Komprimering er jo ret
> smart, hvis du vælger at sende indholdet af Stream'en via Indy.
>
> Noget andet du skal betragte er Polymorfi. Det vil sige, at har du først
> skrevet noget funktionalitet som benytter TStream klassen, så kan du bruge
> en hvilket som helst stream. Et eksempel kunne være SendStream(AStream:
> TStream); Alle klasse der er nedarvet fra TStream kan bruges som den
> Aktuelle parameter. Et par eksempler kunne være:
>
> SendStream(MyZipStream);
> SendStream(MyArjStream);
> SendStream(MyCabStream);
> SendStream(MyMemoryStream);
> Etc.
>
> Her er metoden SendStream lige glad med hvilken Stream den benytter. Den
> anvender blot den generaliserede adfærd, som er blevet implementeret i
> TStream klassen.
>
> Jeg har ikke lige læst det jeg har skrevet igennem, da jeg har lidt travlt
> på arbejdet. Hvis det er uforståligt, så håber jeg da, at du har fået lidt
> ud af det alligevel. Skriv eventuelt, hvis du har nogle spørgsmål.

jo det var en fin forklaring, tak for det. Det jeg så ikke kan forstå er at
når nogen i en NG spørger om hvordan man f.eks. henter en fil eller gemmer
en fil så er der nogen der giver et eks. på det ved at benytte stream og så
sidder den stakkels nybegynder der og syntes det er så svært, og i stedet
kunne man have skrevet at han bare kunne benytte SaveToFile, LoadFromFile
som han sikkert ville syntes var meget lettere at forstå.
Så altså, hvis det eneste man lige har brug for er at gemme en fil og ikke
andet så er der ingen grund til at rode med stream, er det ikke rigtig?

/HK



Brian Andersen \(www~ (07-12-2006)
Kommentar
Fra : Brian Andersen \(www~


Dato : 07-12-06 12:25

> jo det var en fin forklaring, tak for det. Det jeg så ikke kan forstå er
> at når nogen i en NG spørger om hvordan man f.eks. henter en fil eller
> gemmer en fil så er der nogen der giver et eks. på det ved at benytte
> stream og så sidder den stakkels nybegynder der og syntes det er så svært,
> og i stedet kunne man have skrevet at han bare kunne benytte SaveToFile,
> LoadFromFile som han sikkert ville syntes var meget lettere at forstå.
> Så altså, hvis det eneste man lige har brug for er at gemme en fil og ikke
> andet så er der ingen grund til at rode med stream, er det ikke rigtig?

Intet er rigtig eller forkert. Nogle løsninger kan bare være mere praktiske
end andre *s*.

Det at anvende en Stream er en mere fleksibel løsning (modern løsning), hvis
man på længere sigt ønsker sig noget mere. Altså, hvis noget skal krypteres,
komprimeres, osv. Man kunne jo også forestille sige en Stream der hedder
TCryptoStream. Smart. Ik', sandt (o; Man ville ikke skulle skrive hele
skidtet om, hvis sådan behov skulle opstå.

Når man anvender Stream's, så skal man skrive hvor meget f.eks. en tekst
stregn fylder. Det kan være, at det er det der virker komplekst? Tal ved man
altid hvad fylder. Men tekst kan varriere. Når man så læser fra en Stream og
når til hvor teksten er gemt, så skal man lige læse, hvor meget tekst man
skal læse fra Stream'en.

Ønsker du at kunne indsætte, slette eller ændre data, så ville jeg anvende
en database? Hvis du er nybegynder, så vil jeg anbefale dig BDE'en (TTable,
TQuery, TDataSource, osv.) i Delphi.

Hvis det er for at gemme en indstilling af en eller anden art, så kunne du
vælge .Ini filer eller registreringsdatabasen.

Hvis det blot er for øvelsensskyld, så kan du sagtens vælge en tilgang hvor
du selv står for at oprette og gemme en fil. Du kan oprette og gemme en fil
ved hjælp af kaldene AssignFile, Reset, Write, WriteLn, CloseFile, osv.

Men hvorfor ikke eksperimentere med begge dele? Så du både får øvelse med
selv at stå for det hele og så prøv med TFileStream. Faktisk skal du udføre
nogenlunde de samme operationer uanset om du vælger at gøre det hele selv
eller ej. Hvis du ønsker at skrive en tekst, et tal eller hvad det nu kan
være, så skal du jo skrive det hele manuelt til filen; WriteLn(F, 'Hejsa med
dig'); WriteLn(F, MitTal);

Du kan selvfølgelig også anvende Record's. Her kan du samle dine attributter
og ved hjælp af et kald kan du skrive indholdet af Record'en til en fil.

Men eksperimenter med det...

Ps. Har du tænkt på hvordan Delphi gemmer dine skærmbilleder? Det er via en
Stream. Når Stream'en skal fortolkes, så er der et objekt som fortolker det
input der kommer fra Stream'en. Denne fortolker kan modtage input fra en
hvilket som helst Stream. Blot den er nedarvet fra TStream klassen.

/Brian



Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste