Warum würde BufferedStream.Write throw "Dieser Stream unterstützt keine Suchoperationen"?

8

Dieser verwirrt mich. Ich bekomme einen Fehler bei der Suche, wenn ich sie nicht einmal anrufe?

Ich habe Code, der ungefähr so ​​aussieht:

%Vor%

und ich bekomme diese Ausnahme:

%Vor%

stream hat den Typ System.IO.BufferedStream . Was könnte möglicherweise passieren?

Bearbeiten mit mehr Informationen:

sizeof(uint)==msg.length in diesem Fall.
Der Stream wird als stream = new BufferedStream(new NetworkStream(socket), 1024)

deklariert

bearbeiten:

Das war es! Während man auf einem einzelnen NetworkStream lesen und schreiben kann, ist es beim Wechsel zu einem BufferedStream notwendig, einen separaten zum Lesen und Schreiben zu haben. Man kann anscheinend einfach den NetworkStream -Konstruktor zweimal am selben Socket aufrufen, um das zu bekommen.

Ich würde sowohl Justins als auch Hans 'Antworten akzeptieren, wenn ich könnte, weil man mich genau verstehen ließ, was falsch war, und der andere führte mich zur Lösung. Danke an alle!

    
redtuna 22.06.2010, 17:41
quelle

2 Antworten

9

Das Problem liegt in der inneren Funktionsweise von BufferedStream (und der Tatsache, dass Sie den BufferedStream möglicherweise vor dem Schreiben verwendet haben).

Wenn Sie versuchen, in einen gepufferten Stream zu schreiben, nachdem Sie Ihre Parameter validiert haben, werden die Dinge in dieser Reihenfolge überprüft (der gesamte Code wird über Reflector aus dem Framework abgerufen):

Sind wir am Anfang des Schreibpuffers?

%Vor%

Darf man in den zugrunde liegenden Stream schreiben?

%Vor%

Ist der Lese-Puffer leer?

%Vor%

Wenn ungelesene Daten im Lesepuffer vorhanden sind, wird vor dem Schreiben ein Flush versucht. FlushRead () ruft Seek (), auf, was Ihren Fehler verursacht .

    
Justin Niessner 22.06.2010, 18:06
quelle
4

Sie müssen früher von diesem gepufferten Stream gelesen haben. Es erhält seine Bytes von einem NetworkStream. Diese sind unidirektional, Sie können entweder nur lesen oder nur in sie schreiben, je nachdem, wie sie erstellt wurden. Veröffentlichen Sie den Code, der den NetworkStream erstellt hat, wenn Sie weitere Hilfe benötigen.

    
Hans Passant 22.06.2010 17:57
quelle