Moin Evilboyz,
statt Byteweise zu lesen, könntest Du ja auch immer Blockweise lesen, bis nichts mehr zu lesen ist (Rückgabewert -1).
Mit dem StringOfChar wird die Buffergrösse auf den zumindest erforderlichen Platz gesetzt, und gleichzeitig auf #00 initialisiert, damit der Buffer einen definierten Inhalt hat.
Wenn es sich um grössere Dateien handelt, könnte man natürlich auch (wie bei ReceiveBuf
) Blockweise lesen, und dann je Lesevorgang die Initialisierung wiederholen, damit zumindest der Rest des Buffers (falls die Buffergrösse kein Vielfaches der zu lesenden Anzahl Byte ist) mit einem definierten Wert belegt ist.
Die #00 nehme ich, da dies ein Wert ist, der zumindest in Texten eigentlich nicht auftauchen kann (
Unicode mal ausgenommen), und somit das erste auftreten einer #00 sich oft als Ende der Daten ansehen lässt (wie bei nullterminierten Strings, wie sie bei den Windows
API Funktionen üblich sind).
Beim Einlesen (ob nun über TFileStream.Read, oder über ReceiveBuf) könnte das dann so aussehen:
- Buffer initialisieren
- Daten lesen (Länge = Bufferlänge)
- Keine Daten gelesen dann fertig
- Daten in gelesener Länge verarbeiten
- Weiter mit 1