繁体   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