Это вопрос о формате архива bzip2. Любой архив Bzip2 состоит из заголовка файла, одного или нескольких блоков и хвостовой структуры. Все блоки должны начинаться с «1AY&SY», 6 байт двоично-десятичных цифр числа Пи, 0x314159265359. Согласно источник bzip2:
/*--
A 6-byte block header, the value chosen arbitrarily
as 0x314159265359 :-). A 32 bit value does not really
give a strong enough guarantee that the value will not
appear by chance in the compressed datastream. Worst-case
probability of this event, for a 900k block, is about
2.0e-3 for 32 bits, 1.0e-5 for 40 bits and 4.0e-8 for 48 bits.
For a compressed file of size 100Gb -- about 100000 blocks --
only a 48-bit marker will do. NB: normal compression/
decompression do *not* rely on these statistical properties.
They are only important when trying to recover blocks from
damaged files.
--*/
Вопрос: правда ли, что все архивы bzip2 будут иметь блоки, начало которых выровнено по границе байта? Я имею в виду все архивы, созданные эталонной реализацией bzip2, утилитой bzip2-1.0.5+.
Я думаю, что bzip2 может анализировать поток не как поток байтов, а как поток битов (сам блок кодируется Хаффманом, который по дизайну не выровнен по байтам).
Итак, другими словами: если grep -c 1AY&SY
больше (хаффман может генерировать 1AY&SY внутри блока) или равно количеству блоков bzip2 в файле?