fzip:压缩文件需要完整的内存

时间:2012-05-21 07:56:20

标签: actionscript-3

我正在使用fzip来压缩文件夹的内容。该文件夹包含4个500MB的文件,问题是这使用了我所有的计算机内存。有办法防止这种情况吗?并将内存锁定在20%或其他什么?

这是我的代码:

public function packageFileParser(filesToZip:Array):void {
            for (var i:uint = 0; i < filesToZip.length; i++) {
                if (filesToZip[i]["isDirectory"] == true) {
                    packageFileParser(filesToZip[i].getDirectoryListing());
                } else {
                    if (filesToZip[i]["isHidden"] == false) {
                        var byteLoader:UrlURLLoader = new UrlURLLoader();
                        byteLoader.dataFormat = URLLoaderDataFormat.BINARY;
                        byteLoader.addEventListener (flash.events.Event.COMPLETE, urlLoaderCompleteHandler);
                        var fileRequest:URLRequest = new URLRequest ("/"+filesToZip[i]["nativePath"]);
                        byteLoader.load (fileRequest);  
                    }
                }
            }
        }


        private function urlLoaderCompleteHandler(event:flash.events.Event):void {
            var saveZip : Function = function(zip : FZip) : void {
                var out : ByteArray = new ByteArray();
                zip.serialize(out);

                var fs : FileStream = new FileStream;
                targetFile = File.desktopDirectory.resolvePath(zipName);
                fs.open(targetFile, FileMode.WRITE);
                fs.writeBytes(out);
                out.clear();
                fs.close();
            };
            var fullpath:String = event.target.urlRequest.url;
            var filename:String = fullpath.substr(fullpath.lastIndexOf("/")+1,fullpath.length);
            var filepath:String = fullpath.substr(0,fullpath.lastIndexOf("/")+1);
            filepath = filepath.split("/Users/Thibaut/Desktop/testfolder").join("");
            zip.addFile(filepath+filename, event.target.data);
            saveZip(zip);
        }

1 个答案:

答案 0 :(得分:0)

AFAIK,FZip库在内存中创建整个存档,然后将其保存到磁盘。除了更换图书馆之外,你无能为力。从coltware尝试 airxzip ,它对我有好处(我认为即使在大型档案中也没有大的内存负载,因为在向他们添加文件时它们被刷新到磁盘。)
此外,如果您正在使用AIR功能(FileStream类),则应添加&#34; air&#34;标记为问题,与普通AS3相比,它发生了很大的变化。