2012-02-03 7 views
0

私は戻り値の型との一貫性がない厄介な第三者APIを使用しなければなりません。だから、私はプログラム的なWebリクエストを提出し、ストリームバックを取得し、基礎となるコンテンツはエラーメッセージ(生のテキストか返されるXMLのどちらかになることがあるため、さらに悪いことがあります)か、バイナリファイルを返します。私はどのような形式でも要求されるフォーマットを知る手段がないので、実行時にイントロスペクトする方法が必要です。StreamReaderのコンテンツを特定しますか?

これにどのように取り組むべきですか?ストリームはシーク不可能なので、それ以外のことはできません。私は通常、フロー制御の例外処理を使わないようにしていますが、それを処理する最善の方法かもしれないようです。それが予想されるバイナリファイルタイプで、何が吹くまでならば、頭に浮かぶ

+0

Q:あなたは、少なくとも最初の256バイト開くことができます(または一体を - ちょうど最初の* 4 *バイト)?,そして戻って(あなたは「ヘッダ」で見つけるものに基づいて)*全体*ストリームを処理? – paulsm4

+1

このサードパーティのAPIが公開されている場合は、名前を付けてください。決して使用しません。 – ken2k

+0

ポールはありません。私のできる最善の方法は、最初のkbをバッファに読み込み、ストリームを破棄してバッファを調べ、それが何であるかを調べようとしますバイナリ・コンテンツの場合はリクエストを再発行します。バッファとストリームからのプロセス、その後、あなただけのいくつかをバッファリングし、あなたが望むものを見つけ出す - しかしないことすべては、すべての時間が、私はその優れただけで、それはそのための必要はありません@snappymcsnap – snappymcsnap

答えて

0

ことの一つは、バイトの最初のx番号を調べることで例外をキャッチし、エラーメッセージがどうあるべきかを抽出しようとする必要がありますように、必ずそれを扱いますストリームの中で。最初のビットが整形式xmlの場合は、おそらくxmlです。問題は、生のテキストまたはバイナリの違いを判断しようとしていることです。

+0

最初の数バイトはBOMである可能性があります...そして、XMLを特定するだけで、任意のデータを処理することはごくわずかです –

関連する問題