Сожмите приблизительно 1 000 байтов текста для QueryString

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

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

А полное обсуждение преимуществ здесь: действительно ли Поблочное тестирование стоит усилия?

5
задан Dead account 18 September 2009 в 18:56
поделиться

3 ответа

Что ж, непосредственные проблемы заключаются в следующем:

  • Результат сжатия в основном будет двоичным, поэтому вам нужно кодировать его base64, что сделает его на 1/3 больше еще раз. (Вам также следует использовать веб-безопасную кодировку base64.)
  • Ни один алгоритм сжатия не всегда уменьшает размер текста

Это означает, что если вы не можете справиться (скажем) с ~ 1300 символами в строке запроса, то есть нет гарантии, что он всегда будет работать. (Как говорит Марк, используйте вместо этого тело POST, если возможно ... тогда вы, вероятно, в первую очередь можете проигнорировать сжатие.)

Если вы довольны этим, в вашей ситуации нет ничего особенного. чем любой другой:

  • Кодировать строку в байты
  • Сжать
  • Конвертировать сжатые байты обратно в текст с помощью Конвертировать.
8
ответ дан 18 December 2019 в 13:16
поделиться

Зависит от того, откуда приходят сообщения. Если они все ваши, то у вас есть статический словарь, и ваша строка запроса должна состоять всего из пары символов.

Я предполагаю, что сообщение может быть любым, и оно будет генерироваться пользователем, в этом случае динамически -Метод обучения был бы самым приятным: следите за тем, что пользователи вводят туда, и корректируйте свой словарь сжатия по мере продвижения. Используйте какой-нибудь необычный, но безопасный для URL-адресов символ в качестве escape-символа, чтобы показать, что приближается ключ словаря.

Вы можете заполнить его, взяв список слов из Интернета. Быстрый гугл должен найти 100 или 1000 наиболее распространенных английских слов.

0
ответ дан 18 December 2019 в 13:16
поделиться

Вы можете закодировать строку как UTF-8, чтобы получить массив байтов, который можно сжать. Результатом также является массив байтов, поэтому вы можете использовать кодировку Base-64, чтобы получить его в виде строки:

private static string Compress(string data) {
   using (MemoryStream ms = new MemoryStream()) {
      using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true)) {
         zip.Write(Encoding.UTF8.GetBytes(data), 0, data.Length);
      }
      return Convert.ToBase64String(ms.ToArray());
   }
}

Распаковка - это наоборот:

private static string Decompress(string data) {
   using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(data))) {
      using (GZipStream zip = new GZipStream(ms, CompressionMode.Decompress, true)) {
         using (BinaryReader reader = new BinaryReader(zip)) {
            return Encoding.UTF8.GetString(reader.ReadBytes(10000));
         }
      }
   }
}
6
ответ дан 18 December 2019 в 13:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: