ServletOutputStreamに大きなXMLファイル(1.5Mを超える)を書き込もうとしていて、実際には7分ほどかそれ以上の時間がかかります。
次のように私は何をやっていることは何かである - ついににおけるServletOutputStreamの書き込みが長すぎる
1. SOAPMessage soapRes; // Consider this is populated somewhere and we have the value here
2. ServletResponse res; // Consider this is populated somewhere and we have the value here
3. ServletOutputStream os = res.getOutputStream();
4. ByteArrayOutputStream baos = new ByteArrayOutputStream();
5. soapRes.writeTo(baos);
6. os.write(baos.toByteArray());
-
7. baos.close();
8. os.flush();
9. os.clse();
私はServletOutputStream
のサブクラスについて考えとによるラインでクラスキャストの問題にwrite()
が、カントをオーバーライド#3.
また、SOAPMessage
からコンテンツの長さを抽出して、その値をwrite()
メソッドの#6行に渡し、さらにByteArrayOutputStream
linのコンストラクタ引数として渡してみましたe#4だが何も働かない。
ご提案は大歓迎です。
NB。私はこれをApache Tomcat上で実行しています。 JUnitテストにはこのような問題はありません。この処理は非常に高速で秒単位で実行されますが、Tomcatで実行すると時間がかかります。
ソースが1.5Mb +であるため、間違いなく時間がかかります。しかし、いくつかの最適化方法があるかもしれません。まず第一に、それはSOAPメッセージか簡単なXMLメッセージですか?そして、SOAP本体のみを出力したいですか?そして、今私はあなたの質問のコンテンツチャンクパターンを実装する方法を考えています。ファイルの終わりに達するまで、リトルバイトは出力ストリームに書き込まれ、次に表示されます。私は正しい方法を考えていますか? – Acn
@ Swift-Tuttle:なぜあなたは 'ServletOutputStream'が問題だと思いますか?どんなメソッドとコード行が時間を浪費しているかを特定しましたか?十分に速くデータを消費することができないクライアントではないと確信していますか? – Codo
これはプレーンテキストxmlではなくSOAPメッセージです。本文全体だけでなく、メッセージ全体が必要ですが、身体だけの解決策が何であるかを見ることに興味があると言いました。私はいつかそれを使用しようとするかもしれません。私はいくつかの情報で質問を更新しました。 –