本文介绍了更改编码为UTF-8流(MemoryMappedViewStream)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用下面的代码一样快,我可以读取〜的2.5Gb的XML文件(感谢MemoryMappedFile)。不过,我得到以下异常:'。,十六进制值为0x00,是无效字符9778线,位置73249406 的。。我beleive它是由于一些编码的问题。我如何确保该MemoryMappedViewStream读取使用UTF-8的文件?

 静态无效的主要(字串[] args)
{
使用(var文件= MemoryMappedFile.CreateFromFile (@D:\temp\temp.xml,FileMode.Open,MyMemMapFile))使用
{
(MemoryMappedViewStream流= file.CreateViewStream())
$ { b $体b读出(流);
}
}
} $ B使用
$ B静态无效读(流流)
{
(XmlReader中读取= XmlReader.Create(流) )
{
reader.MoveToContent();

,而(reader.Read())
{
}
}
}


解决方案

您可以使用StreamReader类来设置编码:

 使用(var文件= MemoryMappedFile.CreateFromFile(@静态无效的主要(字串[] args)
{
D:\temp\temp.xml ,FileMode.Open,MyMemMapFile))
{使用
(MemoryMappedViewStream流= file.CreateViewStream())
{
读(流);
}
}
}用

静态无效读(流流)
{
(XmlReader中读取= XmlReader.Create(新的StreamReader (流Encoding.UTF8)))
{
reader.MoveToContent();

,而(reader.Read())
{
}
}
}

希望,这有助于。


I am using the code below to read a ~2.5Gb Xml file as fast as I can (thanks to MemoryMappedFile). However, I am getting the following exception: "'.', hexadecimal value 0x00, is an invalid character. Line 9778, position 73249406.". I beleive it is due to some encoding problem. How do I make sure that the MemoryMappedViewStream reads the file using 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())
        {
        }
     }
 }
解决方案

You could use the StreamReader class to set the encoding:

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(new StreamReader(stream, Encoding.UTF8)))
  {
     reader.MoveToContent();

    while (reader.Read())
    {
    }
 }
}

Hope, this helps.

这篇关于更改编码为UTF-8流(MemoryMappedViewStream)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 01:51