我正在編寫一個實用程序,它將使用LZMA sdk壓縮一個文件(或一組文件),然後將該文件發送到一個ftp服務器。通常壓縮的速度比ftp連接的速度快。我想要做的是不是壓縮文件,等待它完成,然後開始上傳我想壓縮到臨時文件或流,然後當它被壓縮時上傳完成的部分。Pipeling壓縮和ftp傳輸
現在的問題是如何?
我擔心的一個問題是,我將要處理的文件在壓縮時可能會超過1GB,而我將運行該系統的系統將擁有512MB和2GB的RAM,因此我不想讓壓縮端運行瘋狂進入內存並鎖定系統。我一直在考慮的方法是在一個線程中運行壓縮,在內存流中排隊5-10Mb,然後將信息發送到另一個線程中的ftp。這是一個好方法還是有更好的方法來做到這一點?是否有任何需要在文件開始時重寫文件頭的問題?
我打算在c#中編寫此代碼,但c,C++或java中的代碼示例也很好。
謝謝你的幫助。
當你說該文件的內容是您使用StreamUtils.Copy或者你有個人寫(緩衝區,偏移,長度)的調用分塊出來流? – 2010-02-19 20:05:55
@Scott Chamberlain,無論哪種方式工作。所有'StreamUtils.Copy'都會在'source.Read()'和'destination.Write()'上運行一個循環。 – 2010-02-19 20:28:24