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