考虑以下代码:
Stream stream = GetStreamFromSomewhere();
XmlDictionaryReader mtomReader =XmlDictionaryReader.CreateMtomReader
(
stream,
Encoding.UTF8,
XmlDictionaryReaderQuoatas.Max
);
/// ...
/// is there best way to read binary data from mtomReader's element??
string elementString = mtomReader.XmlReader.ReadElementString();
byte[] elementBytes = Covert.FromBase64String(elementString);
Stream elementFileStream = new FileStream(tempFileLocation);
elementFileStream.Write(elementBytes,0,elementBytes.Length);
elementFileStream.Close();
/// ...
mtomReader.Close();
问题是二进制附件的大小有时应该超过 100Mb。有没有办法逐块读取元素的二进制附件,然后将其写入临时文件流,这样我就可以避免为空洞的东西分配内存?
第二个 - 甚至更具体的问题 - 在我读取元素的内容之前,mtomReader 是否创建 mime 二进制附件的任何内部缓存,即为二进制数据分配内存?还是直接从输入流中读取字节?