[英]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.