2016-10-05 38 views
0

節點有各種zip模塊。一般來說,他們似乎遵循這樣一個規律:在node.js中高效地讀取zip文件頭

// Creating a zipfile object 
var zf = new zipfile.ZipFile('./test/data/world_merc.zip'); 

// the zipfile has a list of names: 
// zf.names[0] === 'world_merc.prj' 

的片段上方從node-zipfile README這裏https://github.com/mapbox/node-zipfile解除,但例如一個類似的例子存在的AdmZip包:https://github.com/cthackers/adm-zip

所以這讓我覺得很奇怪,因爲它們都顯示這兩個庫都假定同步代碼(至少需要打開文件才能讀取頭,這是阻塞的,對吧)?

因此,我深入到AdmZip的實現中,事實證明,您可以將緩衝區傳遞給構造函數AdmZip,例如,你可以這樣做:

fs.readFile('./my_file.zip', function(err, buffer) { 
    var zip = new AdmZip(buffer); 
    var zipEntries = zip.getEntries(); 
}); 

但這只是略好,因爲它似乎AdmZip預期,我想讀的只是訪問頭整個文件。我閱讀zip規範,我的理解是列出內容的文件「中央目錄文件頭」無論如何都在文件末尾。

因此,這是一個超長的問題,是否存在一個節點庫,它將有效地和異步地讀取zip內容(例如,如果我要做的事情是沒有實現內存中的整個zip文件,看中央目錄標題)?

回答