2017-02-02 7 views
-1

現在、広範囲のクライアントで正常に動作する既存のWCF SOAPサービスがあります。より大きなファイルセットをダウンロードする方法として、StreamBodyを提示します。私は、クライアントがファイルを完全にメモリにロードすることなく、大きなファイルをダウンロードしようとするあらゆる方法を試みました。私はあらゆる試みをしています。本質的に、以下を呼び出すことにより、JAVAクライアントは完全なファイルをメモリにロードしたい。私は提案を探しています。WCF SOAPサービスから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

いいえ、そうではありません。 'IOUtils.copyLarge(InputStream in、OutputStream out)'は4kのバッファを使います。あなたの問題は他のところにあります。 – EJP

答えて

0

代わりにApacheを経由して全体をコピーするので、あなたは、ループの中にそれを入れてみてください、出力ストリームをフラッシュし、あなたのbufferSizeのを読ん:以下は私の最新の試みです。その後、同じことを続けます。うまくいけば助けになると思う。