2017-09-02 1 views
0

Existe-t-il un moyen d'ignorer ou d'extraire X octets de données à partir de NetworkStream entrant? Vous ne pouvez pas Seek ou Position il, donc il semble que le seul moyen est de le copier dans un autre flux ou juste le lire et le vider ensuite.Décharger des données à partir de NetworkStream entrant?

Actuellement, j'utilise la méthode ReadAsync() pour lire le flux.

+0

Vous avez raison, à moins que le protocole et le point de terminaison ne le supportent d'une manière ou d'une autre, la seule façon de le déplacer est de lire et de vider. – Lloyd

Répondre

2

Non, vous devez lire toutes les données dans un NetworkStream. Si vous avez besoin d'ignorer des données, vous pouvez les lire et les ignorer, mais vous devez les lire avant de les faire avancer. C'est parce que NetworkStream est l'abstraction d'un flux de données de socket TCP - et il n'y a rien dans TCP qui dit d'ignorer les octets - c'est juste un firehose de données binaires venant à vous. Les protocoles au-dessus de TCP, tels que FTP ou HTTP, peuvent implémenter des concepts qui vous permettraient de positionner dans un fichier ou un objet, mais NetworkStream n'est pas au courant de tout cela - il vous laisse juste obtenir les données de socket comme elles viennent.

Si vous avez besoin d'un flux d'abstraire les fonctions Seeking de sorte que vous pouvez passer à un code qui nécessite un flux adressable, vous pouvez construire votre propre classe Stream qui enveloppe NetworkStream qui implémente Seek et ou Position. Bien sûr, sous la table, il faudrait lire et ignorer les sections que vous avez utilisées Seek ou Position pour contourner; et si vous ne le mettez pas en mémoire tampon, vous ne pourrez pas appliquer Seek ou Position en arrière.