【问题标题】:Determining content from StreamReader?从 StreamReader 确定内容?
【发布时间】:2012-02-26 09:17:34
【问题描述】:

我不得不使用与返回类型不一致的蹩脚的第 3 方 API。因此,我提交了一个编程 Web 请求,将 Stream 抓取回来,底层内容可能是一条错误消息(更糟糕的是,它可能是原始文本,也可能是它们返回的 xml),或者它返回一个二进制文件。我无法知道任何给定请求的预期格式,因此我需要一种在运行时自省的方法。

我应该如何解决这个问题?该流是不可搜索的,所以除了阅读它之外我无能为力。我通常尽量不使用异常处理来进行流控制,但似乎这可能是处理它的最佳方式。始终将其视为预期的二进制文件类型,如果出现任何问题,则捕获异常并尝试提取应该是错误消息的内容

【问题讨论】:

  • 问:你能至少打开前 256 个字节(或者见鬼 - 只是前 四个 字节)吗?然后返回并处理整个 i> 流(基于您在“标题”中找到的内容)?
  • 如果这个 3rd 方 API 是公开可用的,请给它命名,这样我就永远不会使用它了。
  • 没有保罗,因为它的不可搜索它的只进和只读,我能做的最好的是将第一个 kb 读入缓冲区然后丢弃流,然后检查缓冲区并尝试弄清楚它是什么,然后如果它的二进制内容重新发出请求。但这只是让它每次都成为双重请求,我认为让它爆炸更好
  • @snappymcsnap 不需要 - 你只需缓冲一些,找出你想要的,然后从缓冲区和流中处理。由于您无论如何都不需要分块处理它,所以没有什么不同。
  • 当然,另一种选择是将流写入临时文件,然后处理该文件(可搜索)。

标签: c# stream io .net


【解决方案1】:

想到的一件事是检查流中的前 x 个字节数。如果第一位是格式良好的 xml,那么它可能是 xml。问题是试图确定原始文本或二进制文件之间的区别。

【讨论】:

  • 前几个字节可能是一个 BOM...而仅仅识别 XML 只是处理任意数据的一小部分
猜你喜欢
  • 2011-10-03
  • 1970-01-01
  • 2011-07-08
  • 2016-08-23
  • 2020-02-19
  • 2010-12-16
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
相关资源
最近更新 更多