Результат сжатия строки в виде строки - PullRequest
0 голосов
/ 25 ноября 2010

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

Например, Compress ( "ABC") возвращает "AwAAAB + LCAAAAAAABADtvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee ++ 997o7nU4n99 // P1xmZAFs9s5K2smeIYCqyB8 / fnwfPyKyyfT / AcJBJDUDAAAA"

Могу ли я получить простой строковый результат.

Спасибо

using System.IO.Compression;
using System.Text;
using System.IO;

public static string Compress(string text)
{
byte[] buffer = Encoding.UTF8.GetBytes(text);
MemoryStream ms = new MemoryStream();
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
{
zip.Write(buffer, 0, buffer.Length);
}

ms.Position = 0;
MemoryStream outStream = new MemoryStream();

byte[] compressed = new byte[ms.Length];
ms.Read(compressed, 0, compressed.Length);

byte[] gzBuffer = new byte[compressed.Length + 4];
System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
return Convert.ToBase64String (gzBuffer);
}

Ответы [ 3 ]

0 голосов
/ 25 ноября 2010

уверен, потому что результат в base64 (см. Последнюю строку в вашем коде).

0 голосов
/ 25 ноября 2010

Сжатие не всегда приводит к меньшему выводу по нескольким причинам:

  1. Входные данные могут быть абсолютно случайными, в этом случае большинство сжатий ничего не будет сжимать, но все же необходимо сохранить «инструкции» для декомпрессии. Результатом сжатия таких данных являются данные + инструкции ... больше.
  2. Вход не имеет функций, которые ищутся по используемому алгоритму сжатия. Это очень похоже на предыдущий случай, за исключением того, что он зависит от используемого алгоритма сжатия (в вашем случае Gzip).
  3. Очень маленький ввод. Чем меньше вход, тем меньше шансов найти сжимаемые сегменты в нем, поэтому есть большая вероятность, что вы получите псевдослучайный ввод (не случайный, но настолько маленький, что выглядит случайным), и мы вернемся к первому случаю .

Base64 имеет большое значение, да, но не забывайте эти маленькие факты о сжатии в целом.

0 голосов
/ 25 ноября 2010

Код, который вы используете, предназначен для сжатия действительно больших строк. Он сжимает исходную строку с использованием алгоритма сжатия GZip , а затем делает его читаемым (или, возможно, пригодным для использования / "проходным") с использованием кодировки BASE64 .

Base64 расширение исходной строки до ~ 1,33 раза больше (8-битный символ кодируется как 6-битное + 2-битное переполнение для следующего символа). Таким образом, чтобы иметь смысл, строка должна быть сжата как минимум до 70% от длины источника.

Результат ожидается и обычно при использовании этой кодировки.

Чтобы ответить на ваш вопрос, определите, что вы подразумеваете под «простой результат строки»

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