首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MemoryStream来自HttpContent而不进行复制

MemoryStream来自HttpContent而不进行复制
EN

Stack Overflow用户
提问于 2020-03-19 02:23:40
回答 2查看 2.1K关注 0票数 1

我试图在POST请求中使用System.Net.Http。我同意在内存中,但需要获得MemoryStream。其中一种方法是调用HttpContent.GetAsByteArrayAsync()并在其上包装一个MemoryStream,但我认为这需要将内容复制到单独的字节数组中(因为它返回byte[]的任务)。

如果响应体已经在HttpContent中的某个内部缓冲区中,那么是否可以在该缓冲区的基础上创建MemoryStream,或者以某种方式从HttpContent返回MemoryStream,并避免复制到单独的字节数组?

还有HttpContent.GetAsStreamAsync(),但返回的是正则流,而不是MemoryStream。尽管它可能已经是MemoryStream的一个实例,但我认为将返回的流转换为MemoryStream并不安全,或者是一个很好的实践?(因为这是可能发生变化的实现细节)。

有没有其他方法可以做到这一点,或者我别无选择,只能首先复制到byte[]中?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-19 04:36:02

如果您首先调用LoadIntoBufferAsyncReadAsStreamAsync将返回一个只读 MemoryStream

代码语言:javascript
复制
await req.Content.LoadIntoBufferAsync();
var stream = (MemoryStream) await req.Content.ReadAsStreamAsync();
票数 3
EN

Stack Overflow用户

发布于 2021-11-29 18:27:17

如果首先调用LoadIntoBufferAsync,则可以使用CopyToAsync填充只读 MemoryStream

代码语言:javascript
复制
var stream = new MemoryStream(req.Content.Headers.ContentLength);
await req.Content.LoadIntoBufferAsync((int)req.Content.Headers.ContentLength);
await req.Content.CopyToAsync(stream);

此实现不依赖于副作用,所有框架版本的文档都支持这种实现:https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpcontent.loadintobufferasync?view=netframework-4.6.2

注:我试着编辑上面的答案,但做不到.所以你来了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60750084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档