为什么MemoryStream限制为6KB的数据?

时间:2012-06-08 17:00:56

标签: xml stream linq-to-xml memorystream xmlwriter

我有一个XML文档,共有7,917个字符。它使用LINQ to XML读入XElement,但我需要将此XElement映射/转换/调整为字符串(以发送到Web服务)。

这是我的方法:

    public string AdaptXElementToString(XElement xml)
    {
        Encoding encoding = Encoding.GetEncoding(SpecializedEncodings.Iso88591);

        using (MemoryStream memoryStream = new MemoryStream())
        {
            XmlWriterSettings settings = new XmlWriterSettings { Encoding = encoding };

            memoryStream.SetLength(21*1024*1024);

            using (XmlWriter writer = XmlWriter.Create(memoryStream, settings))
            {
                xml.WriteTo(writer);
                memoryStream.Flush();

                string xmlText = encoding.GetString(memoryStream.ToArray());
                return xmlText;
            }
        }
    }

当我调用此方法时,我可以看到使用Intellisense,'xml'具有我文件的整个内容。但是,字符串xmlText会在第6144个字符(完全是6 KB)处被截断。因为xmlText正在逐渐消失,我失去了1773个字符。

有谁知道为什么这个方法没有返回整个字符串?我将内存流缓冲区的长度设置为21 MB,以确保它足够大(即使默认构造函数支持调整大小)。

如果我删除对SetLength()的调用,我会得到相同的行为。如果我删除对Flush()的调用,我也会得到相同的行为。

出于我的目的,我必须使用ISO-8859-1编码,因此我无法更改为UTF-8或16。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

解决了问题:

使用writer.Flush();不是memoryStream.Flush()