2015-04-26 48 views
0

我的應用程序需要將多個文件傳輸到http服務器(通過從HttpUrlConnection打開OutputStream),但爲了避免連接建立的開銷,我們只想使用一個連接。這是可行的嗎?通過HttpUrlConnection傳輸多個文件

注意:數據是實時創建的,因此我們無法將它們添加到一個存檔文件中並一次傳輸。

感謝您的建議!

回答

3

你過度優化。 HttpURLConnection已經在幕後做了TCP連接池。每個文件只需使用新的URL,HttpURLConnection,OutputStream等。

+1

謝謝EJP!您能否介紹一下TCP連接池? (游泳池大小,超時等)。是否有可能控制這個池?如果我們在每次傳輸後調用UrlConnection.disConnect(),TCP連接是否合併? – opera

0

的事實,你必須輸出多個文件不會阻止的事實,你仍然可以使用,可以使用OutputStream創建歸檔格式, 實時;而zip就是這樣一種格式。

JDK有ZipOutputStream它可以幫助你;基本上可以使用它作爲此類(代碼來設置的HTTP標頭未示出):

// out is your HttpUrlConnection's OutputStream 

try (
    final ZipOutputStream zout = new ZipOutputStream(out); 
) { 
    addEntries(zout); 
} 

addEntries()方法將隨後創建ZipEntry情況下,每個文件包含一個,並寫入的內容。

+0

謝謝fge!實際上數據已經直接寫入GZIPOutputStream。目的地的結果文件將是 .tar.gz。這裏的問題在於數據在一段時間之後(每5分鐘1個文件),我們需要立即進行流式處理。 – opera