Каким методом в C# можно заменить метод сжатия строки из PHP
gzcompress("string", число степени сжатия)
Полного аналога нет.
В качестве альтернативы можно использовать DelateStream
или GZipStream
. Но надо учитывать, что полученные массивы байт будут отличаться:
|gzcompress|DeflateStream|GZipStream|gzencode|
|PHP |.net 4+ |.net 4+ |PHP |
|----------|-------------|----------|--------|---
| | |31 |31 |
| | |139 |139 |
| | |8 |8 | h
| | |0 |0 | e
| | |0 |0 | a
| | |0 |0 | d
| | |0 |0 | e
| | |0 |0 | r
|120 | |4 |2 |
|218 | |0 |3 |
|----------|-------------|----------|--------|---
|43 |43 |43 |43 |
|73 |73 |73 |73 | c
|45 |45 |45 |45 | o
|46 |46 |46 |46 | m
|81 |81 |81 |81 | p
|200 |200 |200 |200 | r
|77 |77 |77 |77 | e
|45 |45 |45 |45 | s
|46 |46 |46 |46 | s
|78 |78 |78 |78 | e
|76 |76 |76 |76 | d
|79 |79 |79 |79 |
|85 |85 |85 |85 | c
|200 |200 |200 |200 | o
|204 |204 |204 |204 | n
|83 |83 |83 |83 | t
|40 |40 |40 |40 | e
|200 |200 |200 |200 | n
|40 |40 |40 |40 | t
|0 |0 |0 |0 |
|0 |0 |0 |0 |
|----------|-------------|----------|--------|---
|73 | |17 |17 |
|21 | |189 |189 | f
|7 | |70 |70 | o
|37 | |177 |177 | o
| | |19 |19 | t
| | |0 |0 | e
| | |0 |0 | r
| | |0 |0 |
Во всех четырех случаях использовалось максимально доступное в настройках сжатие текста "test message in php"
.
Как не сложно заметить, сжатый контент совпадает, а дополнительные header и footer отличаются.
Тут надо сделать серьезную оговорку, что совпадение контента обусловлено его длиной и содержимым и, в общем случае, на это рассчитывать не стоит (см. ниже), но полученный набор байт, в любом случае, может быть распакован при соответствующей корректировке заголовков.
Также при сравнении стоит учесть, что в версиях .net меньше 4 была использована собственная реализация алгоритмов Deflate, мягко говоря, неудачная. Начиная с 4.0 используется zlib.
Кроме того, оригинальная PHP-функция позволяет выбирать из десяти возможных степеней сжатия (0 - без сжатия, 9 - максимальное). DeflateStream и GZipStream позволяют выбирать только из трех вариантов: None
, Fastest
, Optimal
, при этом не очевидно как между собой соотносятся оригинальные уровни zlib и предложенные уровни потоков (ну кроме None).
Ну и всегда остается возможность самостоятельно реализовать необходимые функции, импортировав их из zlib. Можно подсмотреть как это сделано в исходниках DeflateStream или GzipStream.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Вот код вывода трех последних постовУ меня много рубрик, но этот код выводит последние три добавленные посты не зависимо в каких рубриках...
Нужно сделать так чтобы вопросы появлялись по очереди после того как пользователь ответит
Есть таблица и в нем запись длинной 1886209Когда достаю эту записть то получаю строку длиной 1048576