2012-02-03 42 views
0

我不得不与一个蹩脚的第三方API一起工作,这与返回类型没有一致性。所以我提交了一个程序化的Web请求,抓回Stream,底层内容可能是一个错误信息(更糟糕的是,因为它可能是原始文本,或者它们返回的xml),或者它返回一个二进制文件。我无法知道对于任何给定的请求需要什么样的格式,所以我需要一种在运行时反思的方式。确定StreamReader的内容?

我应该如何去解决呢?流是不可查找的,所以除了读它之外,我什么也做不了。我通常尽量不使用异常处理进行流量控制,但似乎可能是处理异常处理的最佳方式。始终把它像它应该是预期的二进制文件类型,如果有什么打击了,然后捕获异常,并尝试提取应该是什么错误消息出现在脑海

+0

问:你能至少打开第一个256个字节(或赫克 - 只是第一个*四个*字节)?然后回去处理*整个*流(根据你在“头”查找) ? – paulsm4 2012-02-03 19:07:08

+1

如果这个第三方API是公开的,请将其命名,所以我永远不会使用它。 – ken2k 2012-02-03 19:07:30

+0

没有保罗,因为它的非可查找其只进和只读的,我能做的最好的是阅读第一千到缓冲区中,然后弃流,然后检查缓冲区,并试图弄清楚它是什么,然后如果其二进制内容重新发出请求。不过这些都不会是让双请求每一次,我认为它能够更好地就让它吹 – snappymcsnap 2012-02-03 19:15:33

回答

0

有一件事是检查字节的第一个X号在流中。如果第一个位格式良好,那么它可能是xml。问题是试图确定原始文本或二进制文件之间的差异。

+0

前几个字节可能是BOM ......只是识别XML只是处理任意数据的一小部分 – 2012-02-03 19:53:50