[英]memory problems with large file download from WCF SOAP service to JAVA client
我们目前有一个现有的 WCF SOAP 服务,可以在大量客户端上正常运行。 我们提供了一个 StreamBody 作为下载更大文件集的一种方式。 我已经尝试了几乎所有方法来尝试下载大文件,而无需客户端将文件完全加载到内存中。 我在每一次尝试中。 本质上,通过调用以下代码,JAVA 客户端希望将完整文件加载到内存中。 我正在寻找建议。 以下是我最近的尝试:
OrderServiceStub stub = getOrderServiceStub();
OrderServiceStub.GetStreamedOrderOutputRequestMessage getStreamedOrderOutputRequestMessage = new OrderServiceStub.GetStreamedOrderOutputRequestMessage();
OrderServiceStub.GetStreamedOrderOutputRequest getStreamedOrderOutputRequest = new OrderServiceStub.GetStreamedOrderOutputRequest();
for (OrderServiceStub.OrderOutput o : orderoutput.getOrderOutput()){
OrderServiceStub.Guid guidOutput = o.getOrderOutputTicket();
String fileName = o.getOrderOutputName();
getStreamedOrderOutputRequest.setOrderOutputTicket(guidOutput);
getStreamedOrderOutputRequestMessage.setGetStreamedOrderOutputRequest(getStreamedOrderOutputRequest);
int bufferSize = 1024;
InputStream is = new BufferedInputStream(stub.getStreamedOrderOutput(getStreamedOrderOutputRequestMessage).getFileData().getStreamBody().getInputStream());
OutputStream os = new FileOutputStream(new File("C:\\temp\\" + fileName));
org.apache.commons.io.IOUtils.copyLarge(is, os);
org.apache.commons.io.IOUtils.closeQuietly(is);
org.apache.commons.io.IOUtils.closeQuietly(os);
}
您可以尝试将其放入循环中,读取 bufferSize,然后刷新输出流,而不是通过 apache 复制整个内容。 然后继续,做同样的事情。 希望这会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.