3
我想壓縮一堆文件,並通過數據流使數據消耗。DotNetZip流式傳輸
我想保持內存佔用儘可能小。
我的想法是實現一個流,我有一堆FileStream對象作爲數據成員。當我的Stream上的Read方法被調用時,我會從我的一個文件流中讀取一些數據,並使用ZipOutputStream實例將壓縮數據寫入臨時存儲流,然後將該請求轉發給臨時存儲流。
這個臨時存儲流只是一個字節隊列。當這些字節被移入緩衝區(通過調用Read)時,它們將從隊列中被刪除。這樣,我只能存儲尚未讀取的字節。
不幸的是,它似乎當我處置一個ZipOutputStream它需要寫入隨機文件位置以創建一個有效的zip文件。這將阻止我使用我的「短暫數據」解決方案。
但願這一切清楚:)
有另一種方式創建壓縮文件時,最大限度地減少內存佔用?請幫忙!
謝謝!
您需要在ZipOutputStream上調用dispose()以使其生成有效的zip文件。如果不需要查找,那麼dispose()會做什麼? – Jordan 2012-02-07 20:46:36
它與普通輸出流類似:需要刷新緩衝區。它還會寫入文件格式所需的頁腳。 – svick 2012-02-07 21:02:26
這大部分工作...現在我已經修復了所有的錯誤。它看起來像我被迫在Ionic.Zip.CountingStream中包裝我的不可查找的流,以使其工作。任何想法爲什麼這是? – Jordan 2012-02-08 17:07:38