簡體   English   中英

Apache commons fileupload“Streaming API”

[英]Apache commons fileupload “Streaming API”

我引用了Commons FileUpload Apache Commons頁面

該頁面描述了commons文件上載庫的傳統API。 傳統的API是一種方便的方法。 但是,為了獲得最佳性能,您可能更喜歡速度更快的 Streaming API。

我的問題

具體哪些差異使得Streaming APItraditional API更快?

關鍵區別在於您處理文件的方式,正如您自己注意到的工廠類。

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

之后,您可以使用bufferedInputstream,字節數組或類似方法將數據保存到磁盤。

編輯:打開流時的處理程序( fileItemStreamElement.openStream ())是一個常見的InputStream實例。 所以,你的“如果它是一個大文件”的答案就像這樣的內存問題與Java中的InputStream

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

“用戶指南”中描述的傳統API假定文件項必須存儲在某個位置,然后才能由用戶實際訪問。 這種方法很方便,因為它可以輕松訪問項目內容。 另一方面,它是內存和耗時。

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

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

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

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

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

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

它適用於您正在使用的文檔的“紙管”視圖的基礎。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM