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.
Eine etwas besser lesbare Version:
%Vor% Oder als eine Erweiterungsmethode für die Klasse Stream
geschrieben:
Einfach; du Schleife;
%Vor% Danach sollte buf
mit genau der richtigen Datenmenge aus dem Stream gefüllt sein oder ein EOF ausgelöst haben.