Powiedz, że mam plik bzip2 (ponad 5 GB) i chcę rozpakować tylko blok #x, ponieważ tam są moje dane (blok jest inny za każdym razem). Jak to zrobić?Dekompresuj tylko określony blok bzip2.
Zastanowiłem się nad utworzeniem indeksu miejsc, w których znajdują się wszystkie bloki, a następnie wyciąć potrzebny blok z pliku i zastosować do niego bzip2recover.
Też myślałem o kompresji powiedzmy 1MB na raz, a następnie dołączając to do pliku (i nagrywając lokalizację) i po prostu chwytając plik, kiedy go potrzebuję, ale wolałbym zachować nienaruszony oryginalny plik bzip2.
Moim preferowanym językiem jest Ruby, ale rozwiązanie dowolnego języka jest w porządku (o ile rozumiem zasadę).
sic! Początek bloku nie może być granicą bajtów :(W "seek-bzip2" znajduje się program Bzip-Table, aby uzyskać listę przesunięcia bitów i rozmiarów oryginalnych rozmiarów bloków danych: – osgx
Niestety, "bzip-table" jest prawie taki sam prędkość jako faktyczna dekompresja :(To prawie pełny cykl dekompresji, ale nie sprawdzaj CRC – osgx
Zobacz także równoległe bzipy, takie jak pbzip2 autorstwa Jeffa Gilchrista, a przy równoległej dekompresji musisz przeszukać nagłówki bloków. http://www.google.com/codesearch/p?hl=en#calSvFpbfuI/trunk/trunk/demo/pbzip2-1.0.2/pbzip2.cpp&q=pbzip2&sa=N&cd=2&ct=rc&l=3 Funkcja "producer_decompress" – osgx