節點有各種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文件,看中央目錄標題)?