Проблема со сжатием zlib в сценарии поиска файлов. Доступен ли в zlib какой-либо механизм блокировки / пометки, обеспечивающий целостность между этими - PullRequest
0 голосов
/ 15 октября 2018

Я работаю над проектом, который имеет дело с большими файлами. В нашей кодовой базе мы действительно стремимся записать определенную информацию, большую часть времени эти поиски очень малы, я подумал использовать zlib в моем потоковом модуле записи / чтения просточтобы сэкономить место на диске, но из-за такого поиска я не могу его интегрировать, потому что для этого мне нужно сначала записать в буфер, затем сжать буфер и записать обратно, что является беспокойством в очень старой / беспорядочной кодовой базе.Простой способ - предоставить мой дескриптор файла gzlib для потокового писателя и API gzlib writer, который будет записываться автоматически, но застрянет / неуверен в сценарии поиска, что приводит меня к неприятностям.Я ищу механизм, чтобы я мог сказать zlib (блокировка / атомарность), как, эй, не сжимать его, пока не разблокировать / флаг, таким образом, поиск по внутреннему буферу будет не сжатым, и мои данные и база кода будет меньшенеповрежденными.Любое предложение будет очень полезным.

1 Ответ

0 голосов
/ 15 октября 2018

Вы не можете искать и писать через поток gzip.gzip предназначен только для последовательного использования, как для чтения, так и для записи.

В zlib есть функция gzseek(), но она очень ограничена в том, что и как она делает.При записи вы можете искать только вперед, и в этом случае промежуточные несжатые байты заполнены нулями.Вы можете искать вперед и назад при чтении.Однако поиск в обратном направлении очень медленный, так как он перемотает все назад до начала файла и затем прочитает все это в нужную позицию.

...