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