Используя поблочное тестирование навык кодирования.
я нахожу, что это добавляет очень мало служебное к кодированию времени. К тому же произведенный код имеет тенденцию быть намного легче понять и осуществить рефакторинг с невыразимым сокращением во время обслуживания.
А полное обсуждение преимуществ здесь: действительно ли Поблочное тестирование стоит усилия?
Что ж, непосредственные проблемы заключаются в следующем:
Это означает, что если вы не можете справиться (скажем) с ~ 1300 символами в строке запроса, то есть нет гарантии, что он всегда будет работать. (Как говорит Марк, используйте вместо этого тело POST, если возможно ... тогда вы, вероятно, в первую очередь можете проигнорировать сжатие.)
Если вы довольны этим, в вашей ситуации нет ничего особенного. чем любой другой:
Конвертировать.
Зависит от того, откуда приходят сообщения. Если они все ваши, то у вас есть статический словарь, и ваша строка запроса должна состоять всего из пары символов.
Я предполагаю, что сообщение может быть любым, и оно будет генерироваться пользователем, в этом случае динамически -Метод обучения был бы самым приятным: следите за тем, что пользователи вводят туда, и корректируйте свой словарь сжатия по мере продвижения. Используйте какой-нибудь необычный, но безопасный для URL-адресов символ в качестве escape-символа, чтобы показать, что приближается ключ словаря.
Вы можете заполнить его, взяв список слов из Интернета. Быстрый гугл должен найти 100 или 1000 наиболее распространенных английских слов.
Вы можете закодировать строку как 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));
}
}
}
}