[英]Convert MemoryStream to Array C#
我已经实现了一个代码块,以便将 Stream 转换为字节数组。 代码片段如下所示。 但不幸的是,它在将 MemoryStream 转换为 Array 时给出了 OutOfMemory 异常(返回 newDocument.ToArray();)。 请问有人可以帮我吗?
public byte[] MergeToBytes()
{
using (var processor = new PdfDocumentProcessor())
{
AppendStreamsToDocumentProcessor(processor);
using (var newDocument = new MemoryStream())
{
processor.SaveDocument(newDocument);
return newDocument.ToArray();
}
}
}
public Stream MergeToStream()
{
return new MemoryStream(MergeToBytes());
}
首先:文件有多大? 如果它对于byte[]
限制太大:你将不得不使用不同的方法。
但是,一个MemoryStream
已经由一个(超大)数组支持; 您可以简单地使用newDocument.TryGetBuffer(out var buffer)
来获得它,并注意您必须将自己限制在由.Offset
(通常但不总是为零)和.Count
(字节数)指示的.Array
部分这应该被认为是“活的”)。 请注意, TryGetBuffer
可以返回false
,但不能在new MemoryStream()
场景中。
如果您将MemoryStream
转换为byte[]
然后再转换回MemoryStream
也很有趣。 这里的另一种选择是将Position
设置回0
,即倒带它。 所以:
public Stream MergeToStream()
{
using var processor = new PdfDocumentProcessor();
AppendStreamsToDocumentProcessor(processor);
var newDocument = new MemoryStream();
processor.SaveDocument(newDocument);
newDocument.Position = 0;
return newDocument;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.