我们目前有一个现有的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);
}
答案 0 :(得分:0)
不是通过apache复制整个事物,而是尝试将其放入循环,读取bufferSize,然后刷新输出流。然后继续,做同样的事情。希望这会有所帮助。