我從Apache的共享頁面引用的Commons FileUpload
阿帕奇通用FileUpload 「流API」
本頁面描述公地的傳統API文件上傳 庫。傳統的API是一種方便的方法。但是,對於 的最終性能,您可能更願意使用更快的 Streaming API。
我的問題
做出什麼具體區別Streaming API
比traditional API
快?
我從Apache的共享頁面引用的Commons FileUpload
阿帕奇通用FileUpload 「流API」
本頁面描述公地的傳統API文件上傳 庫。傳統的API是一種方便的方法。但是,對於 的最終性能,您可能更願意使用更快的 Streaming API。
我的問題
做出什麼具體區別Streaming API
比traditional API
快?
的主要區別是在你處理文件,如你自己和工廠類注意到的方式。
在獲取輸入流時,流式API不保存在磁盤中。最後,你將能夠更快地處理文件(在臨時內存上花費)......但是想法是避免將二進制文件保存在磁盤中,除非你真的想/需要。
之後,您可以將數據保存到磁盤,當然,使用bufferedinputstream,字節數組或類似的。
編輯:處理程序,當您打開流(fileItemStreamElement。openStream())是一個常見的InputStream實例。所以,你的「如果它是一個大文件」的答案是這樣的Memory issues with InputStream in Java
編輯:流API不應該保存到磁盤或保存在內存中。它只是提供一個可以讀取的流,將文件複製到任何你想要的位置。這是避免擁有臨時目錄並避免分配足夠內存來保存文件的一種方法。這應該會更快,至少因爲它不會被複制兩次,一次從瀏覽器到磁盤/內存,然後從磁盤/內存再次被複制到任何您保存的位置。
+1,如果文件的大小大於內存的容量會怎樣? – 2012-07-28 22:15:44
編輯回答你的問題(試圖) – Alfabravo 2012-07-30 01:36:11
用戶指南中描述的傳統API假定文件項必須存儲在某處,然後才能由用戶實際訪問。這種方法很方便,因爲它可以方便地訪問項目內容。另一方面,這是記憶和耗時的。
這是一個不同的問題,這是沒有說明在那裏... – Alfabravo 2012-07-27 22:26:08
@Alfabravo我刪除了我的評論,即使那麼我不認爲這個答案是值得任何內部爲什麼Streaming API比傳統的API更快? – 2012-07-27 22:29:16
流式傳輸通常指的是API(如Apache FileUpload或StAX),其中數據在應用程序運行時經常實時傳輸和分析,並且通常來自其內容事先未精確知道的動態源。
傳統模型指API(如傳統文件處理API,DOM API),它提供了有關數據的更多詳細信息。
與FileHandling API類似傳統方法假定文件項必須存儲在某處,然後才能由用戶實際訪問。這種方法很方便,因爲它可以方便地訪問項目內容。另一方面,這是記憶和耗時的。
Streaming API將具有更小的內存佔用空間和更小的處理器要求,並且在某些情況下可以具有更高的性能。
它適用於您正在使用的文檔的「紙板管」視圖的基礎。
流API不應保存到磁盤或保存在內存中。它只是提供一個可以讀取的流,將文件複製到任何你想要的位置。這是避免擁有臨時目錄並避免分配足夠內存來保存文件的一種方法。這應該會更快,至少因爲它不會被複制兩次,一次從瀏覽器到磁盤/內存,然後從磁盤/內存再次被複制到任何您保存的位置。
第一個問題太含糊。本身可以使線程關閉。第二個是人們可以真正回答的問題... – Alfabravo 2012-07-27 22:31:10
@Alfabravo現在? – 2012-07-27 22:42:04
現在我正在努力幫助,不知道答案是否涵蓋了您的期望,或者您是否在尋找具體問題。 – Alfabravo 2012-07-27 22:56:24