2012-01-10 306 views
1

我想写一个大的XML文件(超过1.5M)到一个ServletOutputStream,它需要很长时间,接近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(),但不能归因于线类转换问题#
我也尝试从SOAPMessage中提取内容的长度,并在第#6行的write()方法中传递该值,甚至作为ByteArrayOutputStream lin的构造函数参数传递该值e#4但没有工作。
任何建议是最受欢迎的。

注意:忘了提到这一点,我在Apache Tomcat上运行它。 JUnit测试没有这样的问题,它处理速度非常快,并且在几秒钟内完成,但是当我通过Tomcat运行时,需要很长的时间。

+0

由于来源是1.5Mb +,它肯定会花费一些时间。尽管如此,可以有一些优化方法。首先它是一个SOAP消息还是普通的XML消息?你是否只想输出SOAP正文?而现在我正在考虑如何为你的问题实现CONTENT CHUNKING模式。小的字节将写入输出流,然后显示,然后是另一个小字节....除非文件结束。我在想正确的方式吗? – Acn 2012-01-10 09:02:28

+0

@ Swift-Tuttle:你为什么认为'ServletOutputStream'是问题所在?您是否确定了哪些方法和哪些代码行浪费了这么多时间?您是否确定客户端无法充分快速地使用数据? – Codo 2012-01-10 09:11:58

+0

它不是一个纯文本xml,而是一个SOAP消息,我想要整个消息,而不仅仅是身体,但说过会有兴趣看看只有身体的解决方案。我可能会尝试在某些方面使用它。我用更多的信息更新了这个问题。 – 2012-01-10 09:12:15

回答

0

正如在问题的评论中提到的,找到了答案。
问题是客户端(TCPMon)而不是代码。