Как я могу определить, был ли сжат байтовый массив? - PullRequest
5 голосов
/ 26 апреля 2010

Могу ли я рассчитывать на то, что первые несколько байтов данных, сжатых с использованием System.IO.Compression.DeflateStream в .NET, всегда одинаковы?

Эти байты, кажется, всегда являются первыми байтами: 237, 189, 7, 96, 28, 73, 150, 37, 38, 47, ...

Я предполагаю, что это какой-то заголовок, я хотел бы предположить, что этот заголовок исправлен и не собирается меняться.

Кто-нибудь получил дополнительную информацию об этом?

Справочная информация (причина, по которой я хочу знать эту информацию ...)

У меня есть множество данных в таблице базы данных, которые могут быть уменьшены. Я решил, что начну сжимать данные и не буду беспокоиться о сжатии существующих данных. Когда данные попадают в мой код .NET, они представляют собой строку.

Я хотел бы иметь возможность просмотреть первые несколько байтов строки и посмотреть, была ли она сжата, если она есть, то мне нужно распаковать ее.

Первоначально я думал, что смогу преобразовать строку в байты и просто попытаться распаковать данные. Тогда, если произойдет исключение, я могу предположить, что оно не было сжато. Но я думаю, что проверка байтов заголовка даст мне гораздо лучшую производительность.

Большое спасибо, Майк Г

Ответы [ 2 ]

1 голос
/ 26 апреля 2010

Чтобы быть в безопасности (если это где-то не задокументировано), прикрепите свой магический заголовок спереди. GUID - хороший выбор для этого.

0 голосов
/ 26 апреля 2010

Были внесены некоторые улучшения в GZipStream, сделанные в .NET 4.0, которые предотвращают это. Возможно, миграция в .NET для этого варианта:

Алгоритмы сжатия в System.IO.Compression были улучшены в .NET 4. DeflateStream и GZipStream больше не раздувают уже сжатые данные. источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...