чтение заголовка zip-файла эффективно в узле.js

Существуют различные zip модули для node. Как правило, они, кажется, следовать схеме, как это:

// 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-zipfileREADME здесь 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, и мое понимание заключается в том, что файл «Central directory file header», который перечисляет содержимое, находится в конце файла в любом случае.

Таким образом, это был очень длинный повод к вопросу, существует ли библиотека узлов, которая будет эффективно и асинхронно читать содержимое zip (например, не реализовать весь файл zip в памяти, если все, что я собираюсь сделать, это посмотреть на центральный заголовок каталога)?

1 ответ