簡體   English   中英

將 MemoryStream 轉換為數組 C#

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM