繁体   English   中英

从 WCF SOAP 服务下载大文件到 JAVA 客户端的内存问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM