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运行时,需要很长的时间。
由于来源是1.5Mb +,它肯定会花费一些时间。尽管如此,可以有一些优化方法。首先它是一个SOAP消息还是普通的XML消息?你是否只想输出SOAP正文?而现在我正在考虑如何为你的问题实现CONTENT CHUNKING模式。小的字节将写入输出流,然后显示,然后是另一个小字节....除非文件结束。我在想正确的方式吗? – Acn 2012-01-10 09:02:28
@ Swift-Tuttle:你为什么认为'ServletOutputStream'是问题所在?您是否确定了哪些方法和哪些代码行浪费了这么多时间?您是否确定客户端无法充分快速地使用数据? – Codo 2012-01-10 09:11:58
它不是一个纯文本xml,而是一个SOAP消息,我想要整个消息,而不仅仅是身体,但说过会有兴趣看看只有身体的解决方案。我可能会尝试在某些方面使用它。我用更多的信息更新了这个问题。 – 2012-01-10 09:12:15