2016-08-18 51 views
-1

我目前的應用程序需要讀取數據並使用戶能夠將其作爲文件下載。 服務器端代碼是與此類似:https://stackoverflow.com/a/55788/3192744 我需要裏面的InputStream的數據,我目前的方法獲取InputStream爲:如何將數據放入Java InputStream中?

InputStream getIStream(){ 
    StringBuilder sb = new StringBuilder(); 
    String temp = 「」; 
    while(//there is data to be read from database//){ 
      temp = //partial data or one entry from database 
      //some other modification in temp 
      sb.append(temp).append(「\n」); 
    } 
    exampleString = sb.toString(); 
    InputStream stream = new ByteArrayInputStream(exampleString.getBytes()); 
    } 

此方法適用於現在,因爲我的數據是非常小的,大約1000串,每大約100個字符,因此100000個字符。不過,在我開始下載之前,我需要等待整個數據寫入一個字符串。另外隨着我的數據量增加,它不適合一個字符串。 那麼是否有可能在while循環中更新InputStream。

爲了讀取服務器端的數據,我正在等待返回InputStream的方法,因此可以將InputStream作爲方法參數發送,並在更新時繼續讀取它。

基本上我想實現類似管道的東西,其中發送來自數據庫輸出的修改字符串,並且在接收端將數據放入用於用戶下載的文件中,並且用戶的下載過程可以在數據正在從數據庫中讀取。

+1

我不知道這是否會解決你的問題,但因爲你似乎只寫文本數據,你可以使用而是使用servlet的PrinterWriter,爲檢索到的每個部分數據調用它的'println(String str)'方法。在這種情況下,您可以通過ServletResponse.getWriter()而不是使用ServletResponse.getOutputStream()來檢索PrinterWriter,而不需要使用StringBuilder和InputStream。 – Aaron

+0

正如@Aaron所說,你的問題沒有得到'InputStream'。你應該得到'OutputStream'(或'Writer'),你可以在數據庫中讀取數據的時候輸出數據。 – Kayaman

回答

0

問題是,您將所有數據彙總到StringBuilder(以後到InputStream,您將寫入您的ServletOutputStream),而您可以改寫它。

正如我在評論中提及我建議使用ServletResponsePrinterWriter而不是它的OutputStream,如果你不需要輸出二進制數據,但它的工作都是一樣的。

隨着PrinterWriter

PrinterWriter writer = ServletResponse.getWriter(); 
while(/*there is data to be read from database*/){ 
     temp = //partial data or one entry from database 
     //some other modification in temp 
     writer.println(temp); 
} 
writer.close(); 

隨着ServletOutputStream

OutputStream out = ServletResponse.getOutputStream(); 
while(/*there is data to be read from database*/){ 
     temp = //partial data or one entry from database 
     //some other modification in temp 
     out.write(temp.getBytes()); 
     out.write('\n'); 
} 
out.close(); 
相關問題