2012-07-23 162 views
4

我從Apache的共享頁面引用的Commons FileUpload阿帕奇通用FileUpload 「流API」

本頁面描述公地的傳統API文件上傳 庫。傳統的API是一種方便的方法。但是,對於 的最終性能,您可能更願意使用更快的 Streaming API。

我的問題

做出什麼具體區別Streaming APItraditional API快?

+0

第一個問題太含糊。本身可以使線程關閉。第二個是人們可以真正回答的問題... – Alfabravo 2012-07-27 22:31:10

+0

@Alfabravo現在? – 2012-07-27 22:42:04

+0

現在我正在努力幫助,不知道答案是否涵蓋了您的期望,或者您是否在尋找具體問題。 – Alfabravo 2012-07-27 22:56:24

回答

4

的主要區別是在你處理文件,如你自己和工廠類注意到的方式。

在獲取輸入流時,流式API不保存在磁盤中。最後,你將能夠更快地處理文件(在臨時內存上花費)......但是想法是避免將二進制文件保存在磁盤中,除非你真的想/需要。

之後,您可以將數據保存到磁盤,當然,使用bufferedinputstream,字節數組或類似的。

編輯:處理程序,當您打開流(fileItemStreamElement。openStream())是一個常見的InputStream實例。所以,你的「如果它是一個大文件」的答案是這樣的Memory issues with InputStream in Java

編輯:流API不應該保存到磁盤或保存在內存中。它只是提供一個可以讀取的流,將文件複製到任何你想要的位置。這是避免擁有臨時目錄並避免分配足夠內存來保存文件的一種方法。這應該會更快,至少因爲它不會被複制兩次,一次從瀏覽器到磁盤/內存,然後從磁盤/內存再次被複制到任何您保存的位置。

+0

+1,如果文件的大小大於內存的容量會怎樣? – 2012-07-28 22:15:44

+0

編輯回答你的問題(試圖) – Alfabravo 2012-07-30 01:36:11

0

用戶指南中描述的傳統API假定文件項必須存儲在某處,然後才能由用戶實際訪問。這種方法很方便,因爲它可以方便地訪問項目內容。另一方面,這是記憶和耗時的。

http://commons.apache.org/fileupload/streaming.html

+0

這是一個不同的問題,這是沒有說明在那裏... – Alfabravo 2012-07-27 22:26:08

+0

@Alfabravo我刪除了我的評論,即使那麼我不認爲這個答案是值得任何內部爲什麼Streaming API比傳統的API更快? – 2012-07-27 22:29:16

-1

流式傳輸通常指的是API(如Apache FileUpload或StAX),其中數據在應用程序運行時經常實時傳輸和分析,並且通常來自其內容事先未精確知道的動態源。

傳統模型指API(如傳統文件處理API,DOM API),它提供了有關數據的更多詳細信息。

與FileHandling API類似傳統方法假定文件項必須存儲在某處,然後才能由用戶實際訪問。這種方法很方便,因爲它可以方便地訪問項目內容。另一方面,這是記憶和耗時的。

Streaming API將具有更小的內存佔用空間和更小的處理器要求,並且在某些情況下可以具有更高的性能。

它適用於您正在使用的文檔的「紙板管」視圖的基礎。

0

流API不應保存到磁盤或保存在內存中。它只是提供一個可以讀取的流,將文件複製到任何你想要的位置。這是避免擁有臨時目錄並避免分配足夠內存來保存文件的一種方法。這應該會更快,至少因爲它不會被複制兩次,一次從瀏覽器到磁盤/內存,然後從磁盤/內存再次被複制到任何您保存的位置。