首页 > 解决方案 > 如何在使用时计算数据流(.Net Stream)的长度

问题描述

基本上问题是:有没有一种简单的方法来获得Stream消耗的 a 的长度?

在 .Net 服务中,我们Stream通过 .Net REST API 接收到一个。我们将其保存到文件或数据库中。由于我们可能会以这种方式接收大量大型消息(流),因此我们当然会使用流式传输,因此我们在任何时候都不会在内存中拥有完整的内容(嗯,至少不是故意的)。

我们想计算Stream消耗它的全长,但不知道是否有一种简单的方法可以做到这一点。显然我们不能使用该Length属性,因为底层Stream不支持寻找。

一种方法是实现一个包装器Stream来跟踪消耗的字节数,但这有点麻烦。但也许这样的解决方案已经存在(而且我不擅长搜索)。

标签: c#.net.net-corestreaming

解决方案


如果它Stream本身不支持长度,那么剩下四个选项:

  • 分别传达长度,例如Content-Lengthhttp 中的标头
  • 将有效负载(流内容)中的长度作为前缀(更改数据形状)
  • 缓冲它(不推荐用于大数据)并查看已知的长度
  • 使用时手动跟踪长度
    • 可以Stream通过使用另一个计算消耗的字节数(公开为 )的流来装饰(包装)Position,并将所有其他 API 代理到底层Stream

推荐阅读