c# - 如何在使用时计算数据流(.Net Stream)的长度
问题描述
基本上问题是:有没有一种简单的方法来获得Stream
消耗的 a 的长度?
在 .Net 服务中,我们Stream
通过 .Net REST API 接收到一个。我们将其保存到文件或数据库中。由于我们可能会以这种方式接收大量大型消息(流),因此我们当然会使用流式传输,因此我们在任何时候都不会在内存中拥有完整的内容(嗯,至少不是故意的)。
我们想计算Stream
消耗它的全长,但不知道是否有一种简单的方法可以做到这一点。显然我们不能使用该Length
属性,因为底层Stream
不支持寻找。
一种方法是实现一个包装器Stream
来跟踪消耗的字节数,但这有点麻烦。但也许这样的解决方案已经存在(而且我不擅长搜索)。
解决方案
如果它Stream
本身不支持长度,那么剩下四个选项:
- 分别传达长度,例如
Content-Length
http 中的标头 - 将有效负载(流内容)中的长度作为前缀(更改数据形状)
- 缓冲它(不推荐用于大数据)并查看已知的长度
- 使用时手动跟踪长度
- 您可以
Stream
通过使用另一个计算消耗的字节数(公开为 )的流来装饰(包装)Position
,并将所有其他 API 代理到底层Stream
- 您可以
推荐阅读
- annotations - 注释中的 Symfony 主机变量
- reactjs - 与 axios 一起使用时 package.json 中的代理不起作用
- javascript - AWS config.update 每次我调用时都会读取一个旧值
- c# - 如何从 C# .NET 中的类型化私有变量中公开 IEnumerable 的 IEnumerable
- json - 无法解析 JSON-LD 标记。发现格式错误的 JSON:'
- react-native - 为什么 NPM install 命令会删除我之前在 React-native 中安装的包?
- machine-learning - 如何在 Python 中绘制这种类型的相关矩阵?
- reactjs - Netlify CMS 仅在开发模式下工作,构建和服务在该路径上提供 301
- c# - 如何执行异步编译和脚手架
- python - import pynput 仅在 IDLE Shell 中有效,在脚本中无效