Wie lese ich genau n Bytes aus einem Stream?

7

Das ist ein bisschen schwieriger, als ich es mir vorgestellt habe. Ich versuche, n Bytes aus einem Stream zu lesen.

Die MSDN-Ansprüche müssen nicht gelesen werden Return n Bytes, es muss nur mindestens 1 und bis zu n Bytes zurückgeben, wobei 0 Bytes der Spezialfall des Endes des Streams sind.

Normalerweise verwende ich etwas wie

%Vor%

Ich hoffe auf genau size bytes, aber by spec sollte FileStream auch eine große Anzahl von 1-Byte-Chunks zurückgeben können. Dies muss vermieden werden.

Eine Möglichkeit, dies zu lösen, wäre, zwei Puffer zu haben, einen zum Lesen und einen zum Sammeln der Blöcke, bis wir die angeforderte Anzahl an Bytes erhalten haben. Das ist allerdings etwas umständlich.

Ich habe mir auch BinaryReader angeschaut, aber seine Spezifikation sagt auch nicht klar, dass n Bytes werden sicher zurückgegeben.

Zur Klarstellung: Natürlich kann die zurückgegebene Anzahl von Bytes am Ende des Streams weniger als size sein - das ist kein Problem. Ich spreche nur davon, keine n Bytes zu empfangen, obwohl sie im Stream verfügbar sind.

    
mafu 22.09.2011, 11:36
quelle

2 Antworten

11

Eine etwas besser lesbare Version:

%Vor%

Oder als eine Erweiterungsmethode für die Klasse Stream geschrieben:

%Vor%     
Andrei Bozantan 25.06.2014, 14:53
quelle
9

Einfach; du Schleife;

%Vor%

Danach sollte buf mit genau der richtigen Datenmenge aus dem Stream gefüllt sein oder ein EOF ausgelöst haben.

    
Marc Gravell 22.09.2011 11:38
quelle

Tags und Links