2013-04-26 49 views
0

我嘗試從我的服務器(NanoHttpd)發送多個文件到我的客戶端(Apache DefaultHttpClient)。
我的方法是通過NanoHttpd的一個響應發送多個文件。
爲此我想使用SequenceInputStream。
我想連接多個文件,通過響應(InputStream)發送它們,然後用我的客戶端在一個單獨的文件中再次寫入每個文件。
在Serverside集團我稱之爲:Java SequenceInputStream

List<InputStream> data = new ArrayList<InputStream>(o_file_path.size()); 
for (String file_name : files) 
{ 
    File file = new File(file_name); 
    data.add(new FileInputStream(file)); 
} 
InputStream is = new SequenceInputStream(Collections.enumeration(data)); 
return new NanoHTTPD.Response(HTTP_OK, "application/octet-stream", is); 

我現在的問題是如何獲得並正確分割的文件。
我已經嘗試過了我的客戶在這條路上,但它不工作:

int read = 0; 
int remaining = 0; 
byte[] bytes = new byte[buffer]; 

// Read till the end of the Stream 
while ((read != -1) && (counter < files.size())) 
{ 
    // Create a .o file for the current file 
    read = 0; 
    remaining = is.available(); 

    // Should open each Stream   
    while (remaining > 0) 
    { 
     read = is.read(bytes); 
     remaining = remaining - read; 
     os.write(bytes, 0, read); 
    } 

    os.flush(); 
    os.close(); 
} 

這樣,我想去過的所有流(直到閱讀== 1,或者我知道有沒有文件了) ,並將任何流讀入文件。

我清楚地似乎明白了什麼突破性的錯,因爲is.available()始終爲0
誰能告訴我如何從這個SequencedInputStream,或如何解決我的問題正確讀取。

在此先感謝。

+0

添加一個分隔符,它是文件大小並追加它。然後讀取很多字節,然後讀取下一個文件的8字節大小。 – 2013-04-26 16:34:13

回答

0

它不會這樣工作。 SequenceInputStream將合併一個實體字節流中的所有輸入流。將不會有分隔符或EOF。我建議放棄這個想法並尋找不同的方法。