私の質問に直行しましょう: 私はソケットを持っており、このソケット/ストリームを経由するすべての入力は SAX パーサーによって解析されます。ここで、特定の解析イベントで、SAX イベント ハンドラー内からソケット/ストリームを閉じたいと思います。また、パーサーがまだ動作している間に、特定のケースで外部からストリームを閉じたい。残念ながら、パーサーによって例外がスローされることなく、どちらか一方を実行することはできません (予期しないドキュメントの終了...)。わかりました、この例外をキャッチできましたが、ストリームを安全に閉じる方法を知っていますか?
3621 次
3 に答える
0
これは明らかかもしれませんが、このようなユース ケースには、Stax パーサーの方が適している可能性があります。アプリケーションは反復によって読み取りを制御するため、任意の時点でパーサーとその下にあるストリームを閉じることができます。SAX では、例外をスローする必要がありますが、これは特にエレガントでも効率的でもありません。さらに、ハンドラー内からのみ実行できます。
追加のポイントとして、StaxMateは Stax をより快適に利用できます。それがなければ、Stax は SAX と同様の低レベルの抽象化を持っています。
最後に、問題がソケットによるブロッキングである場合、従来のブロッキング IO ベースの xml パーサーでは解決が難しい場合があります。ノンブロッキング (非同期) 解析を実行できるオープン ソースの xml パーサーが 1 つありますが、それはほとんど知られていないため、興味のある読者にその発見を任せます。:-)
于 2009-04-13T23:36:58.500 に答える