我正在编写一个实用程序,它将使用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