47 votes

Fin de flux rencontrée avant la fin de l'analyse syntaxique ?

J'essaie de désérialiser un flux mais j'obtiens toujours cette erreur "End of Stream encountered before parsing was completed" ?

Voici le code :

        //Some code here
        BinaryFormatter b = new BinaryFormatter();
        return (myObject)b.Deserialize(s);//s---> is a Stream object that has been fill up with data some line over here

Quelqu'un a-t-il des idées ?

0 votes

En plus des problèmes de position du flux signalés ci-dessous, une autre raison pour laquelle cela peut se produire est que votre application se termine avant que le fichier grand site est écrit sur le disque (si vous sérialisez une grande quantité de données dans un flux de fichiers). Pour résoudre ce problème, vous devez implémenter une attente bloquante jusqu'à ce que le fichier soit entièrement écrit, comme dans ce post : stackoverflow.com/questions/10982104/

1 votes

Pour moi, la suppression du fichier de données sauvegardées de " C:\Users\ <Nom d'utilisateur> \AppData\LocalLow\ "Le problème était que j'avais changé de modèle de données après avoir enregistré le fichier, ce qui rendait le modèle des données existantes dans le fichier différent et provoquait des erreurs lors de la désérialisation. J'espère que cela vous aidera.

63voto

Patrick Desjardins Points 51478

Essayez de mettre la position à 0 de votre flux et n'utilisez pas votre objet mais le type d'objet.

        BinaryFormatter b = new BinaryFormatter();
        s.Position = 0;
        return (YourObjectType)b.Deserialize(s);

2 votes

Bonjour, j'ai le même problème ici, mais après avoir inséré s.Position =0 ; j'obtiens "Stream does not support seeking".

6voto

GWLlosa Points 10701

Assurez-vous que la sérialisation est terminée et que le type de sérialisation correspond au type de dé-sérialisation (par exemple, assurez-vous que vous sérialisez avec un BinaryFormatter si vous dé-sérialisez avec un). Vérifiez également que la sérialisation du flux vers lequel vous avez effectué la sérialisation est réellement terminée, avec un Stream.Flush() ou quelque chose de ce genre.

5voto

Ryan O'Connor Points 1

J'ai eu la même exception, jusqu'à ce que j'ajoute la balise [Serializable] à la classe que je sérialise :)

Ensuite, tout a fonctionné parfaitement.

0 votes

C'était exactement mon problème

1 votes

C'était aussi mon problème. Ma classe sérialisée faisait référence à une autre classe qui n'avait pas l'étiquette sérialisable.

1voto

Cela a marché pour moi en

s.Position = 0;

1voto

chandpriyankara Points 909
s.Position = 0;

c'est parce que vous devez aller au début du retour pour commencer à copier les données sur le tableau !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X