【发布时间】:2012-02-26 09:17:34
【问题描述】:
我不得不使用与返回类型不一致的蹩脚的第 3 方 API。因此,我提交了一个编程 Web 请求,将 Stream 抓取回来,底层内容可能是一条错误消息(更糟糕的是,它可能是原始文本,也可能是它们返回的 xml),或者它返回一个二进制文件。我无法知道任何给定请求的预期格式,因此我需要一种在运行时自省的方法。
我应该如何解决这个问题?该流是不可搜索的,所以除了阅读它之外我无能为力。我通常尽量不使用异常处理来进行流控制,但似乎这可能是处理它的最佳方式。始终将其视为预期的二进制文件类型,如果出现任何问题,则捕获异常并尝试提取应该是错误消息的内容
【问题讨论】:
-
问:你能至少打开前 256 个字节(或者见鬼 - 只是前 四个 字节)吗?然后返回并处理整个 i> 流(基于您在“标题”中找到的内容)?
-
如果这个 3rd 方 API 是公开可用的,请给它命名,这样我就永远不会使用它了。
-
没有保罗,因为它的不可搜索它的只进和只读,我能做的最好的是将第一个 kb 读入缓冲区然后丢弃流,然后检查缓冲区并尝试弄清楚它是什么,然后如果它的二进制内容重新发出请求。但这只是让它每次都成为双重请求,我认为让它爆炸更好
-
@snappymcsnap 不需要 - 你只需缓冲一些,找出你想要的,然后从缓冲区和流中处理。由于您无论如何都不需要分块处理它,所以没有什么不同。
-
当然,另一种选择是将流写入临时文件,然后处理该文件(可搜索)。