我们目前有一个现有的 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);
}
与其通过 apache 复制整个内容,不如尝试将其放入循环中,读取缓冲区大小,然后刷新输出流。然后继续,做同样的事情。希望这会有所帮助。