Как определить размер строки и сжать его

Я в настоящее время разрабатываю приложение в C#, который использует Amazon SQS, предел размера для сообщения составляет 8 КБ.

У меня есть метод, который является чем-то как:

public void QueueMessage(string message)

В рамках этого метода я хотел бы, в первую очередь, сжал бы сообщение (большинство сообщений передается в как json, так являются уже довольно маленькими),

Если сжатая строка будет еще больше, чем 8 КБ, то я сохраню ее в S3.

Мой вопрос:

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

6
задан Alex 4 May 2010 в 11:27
поделиться

1 ответ

Чтобы узнать «размер» (в килобайтах) строки, нам нужно знать кодировку. Если мы примем 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
    }
12
ответ дан 8 December 2019 в 18:33
поделиться
Другие вопросы по тегам:

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