Lecture de flux binaire

a marqué ce sujet comme résolu.

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.

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.

+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 ?

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 ! :)

+0 -0

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.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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