Modifier l'encodage UTF-8 sur un flux (MemoryMappedViewStream)
Je suis en utilisant le code ci-dessous pour lire un ~2,5 Go fichier Xml aussi vite que je le peux (grâce à MemoryMappedFile). Cependant, je suis l'exception suivante: "'.', valeur hexadécimale 0x00, est un caractère non valide. Ligne 9778, la position 73249406.". Je crois qu'il est dû à des problème d'encodage. Comment faire en sorte que le MemoryMappedViewStream lit le fichier en UTF-8?
static void Main(string[] args)
{
using (var file = MemoryMappedFile.CreateFromFile(@"d:\temp\temp.xml", FileMode.Open, "MyMemMapFile"))
{
using (MemoryMappedViewStream stream = file.CreateViewStream())
{
Read(stream);
}
}
}
static void Read(Stream stream)
{
using (XmlReader reader = XmlReader.Create(stream))
{
reader.MoveToContent();
while (reader.Read())
{
}
}
}
Non, c'est parce que vous avez exécuté à la fin de la cartographie. Vous pouvez seulement espérer être à la carte le plein de 2,5 giga-octets sur un système d'exploitation 64 bits. Ce code n'est pas accomplir quoi que ce soit, vous êtes de fait, il est plus lent en copiant les données deux fois. D'abord le cache du système de fichiers, de nouveau à la vue. Les fichiers mappés en mémoire ne sont utiles que si vous lisez les mêmes données à plusieurs reprises. Vous n'avez pas.
OriginalL'auteur Martin | 2011-08-19
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la classe StreamReader pour définir l'encodage:
Espère que, cela aide.
OriginalL'auteur Hans
Sur MSDN vous obtenez le résultat suivant.
"XmlReader scanne les premiers octets du flux à la recherche pour une marque d'ordre d'octet ou d'un autre signe de l'encodage"
Votre fichier xml de spécifier un encodage?
Makholm, changé ma réponse. Désolé pensé qu'il pourrait être la façon dont il a été la lecture et la conversion du flux. Mais seulement vu son exemple par la suite.
OriginalL'auteur Jethro