Я в настоящее время разрабатываю приложение в C#, который использует Amazon SQS, предел размера для сообщения составляет 8 КБ.
У меня есть метод, который является чем-то как:
public void QueueMessage(string message)
В рамках этого метода я хотел бы, в первую очередь, сжал бы сообщение (большинство сообщений передается в как json, так являются уже довольно маленькими),
Если сжатая строка будет еще больше, чем 8 КБ, то я сохраню ее в S3.
Мой вопрос:
Как я могу легко протестировать размер строки, и что лучший способ состоит в том, чтобы сжать его? Я не ищу крупные сокращения размера, просто что-то хорошее и легкое - и легкий распаковать другой конец.
Чтобы узнать «размер» (в килобайтах) строки, нам нужно знать кодировку. Если мы примем UTF8, то это будет (без учета спецификации и т.д.), как показано ниже (но поменяйте кодировку, если это не UTF8):
int len = Encoding.UTF8.GetByteCount(longString);
Повторная упаковка; Я бы предложил GZIP через UTF8, необязательно с последующим base-64, если это должна быть строка:
using (MemoryStream ms = new MemoryStream())
{
using (GZipStream gzip = new GZipStream(ms, CompressionMode.Compress, true))
{
byte[] raw = Encoding.UTF8.GetBytes(longString);
gzip.Write(raw, 0, raw.Length);
gzip.Close();
}
byte[] zipped = ms.ToArray(); // as a BLOB
string base64 = Convert.ToBase64String(zipped); // as a string
// store zipped or base64
}