Lecture de flux binaire

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Dans le programme que je développe actuellement, je remplis au fur et à mesure un flux MemoryStream de données et une fois finis je veux extraire ces données afin de les placer dans un tableau d'octets.

J'utilise donc le code suivant :

1
2
3
4
5
6
byte[] result = new byte[this.binaryData.Length];
using(var reader = new BinaryReader(this.binaryData, this.encoding))
{   
    reader.Read(result, 0, int.Parse(this.binaryData.Length.ToString()));
}
return result;

Le code semble s’exécuter correctement, aucune erreur n'est levée, seulement le tableau en sortie est rempli exclusivement de 0 alors que des données sont bien présentes dans le flux.

Avez vous une idée d'où ça peut provenir ?

Merci.

+0 -0
Auteur du sujet

En effet ça simplifie le code mais le résultat reste le même.

Si ça peut aider voila ma déclaration du flux :

1
2
3
this.binaryData = new MemoryStream();
this.encoding = Encoding.GetEncoding(encodingName);
this.writer = new BinaryWriter(this.binaryData, this.encoding);

Rien de spécial concrètement.

Édité par Lowrencium

+0 -0
Auteur du sujet

J'écrit dans le flux au fur et à mesure à partir du BinaryWriter, et si je regarde, les données sont bien présentes à l'intérieure du MemoryStream lors de ma récupération :

Données dans le MemoryStream

Édité par Lowrencium

+0 -0

Je ne connais pas le C#. Si c'était du C que tu nous montrais, je t'aurais directement fait la remarque qu'on ne retourne pas un tableau alloué statiquement à l'intérieur d'une fonction.

Je me demande si c'est le cas ici. A partir de quand vérifies-tu le contenu du tableau result ?

+0 -0

Bonjour,

Dans le programme que je développe actuellement, je remplis au fur et à mesure un flux MemoryStream de données et une fois finis je veux extraire ces données afin de les placer dans un tableau d'octets.

J'utilise donc le code suivant :

1
2
3
4
5
6
byte[] result = new byte[this.binaryData.Length];
using(var reader = new BinaryReader(this.binaryData, this.encoding))
{   
    reader.Read(result, 0, int.Parse(this.binaryData.Length.ToString()));
}
return result;

Le code semble s’exécuter correctement, aucune erreur n'est levée, seulement le tableau en sortie est rempli exclusivement de 0 alors que des données sont bien présentes dans le flux.

Avez vous une idée d'où ça peut provenir ?

Merci.

Lowrencium

Pour t'aider il nous faudrait un exemple de code complet exécutable minimal (on ne veut pas tout ton projet) avec un exemple de test, la sortie attendue et le résultat que tu obtiens.

Merci ! :)

Édité par anonyme

+0 -0

Cette réponse a aidé l'auteur du sujet

Bonjour,

La valeur de retour de BinaryReader.Read te donnera plus d'information sur ce qu'il se passe. En voici la description (source) :

Type : System.Int32

Nombre d'octets lus dans buffer. Il peut être inférieur au nombre d'octets demandé si ce nombre d'octets n'est pas disponible ou égal à zéro si la fin du flux est atteinte.

Tu devrais peut-être aussi t'assurer que les données sont bien envoyées dans le flux en appelant avant la lecture la méthode BinaryWriter.Flush, décrite ici.

Edit : En fait, c'est inutile avec un MemoryStream, au temps pour moi. Il y a un exemple complet sur cette page. Visiblement, il faut réinitialiser la position du flux avant la lecture, est-ce que tu le fais ?

Je ne connais pas le C#. Si c'était du C que tu nous montrais, je t'aurais directement fait la remarque qu'on ne retourne pas un tableau alloué statiquement à l'intérieur d'une fonction.

Ge0

Il n'y a pas de tableau alloué statiquement ici.

Édité par dentuk

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte