MAU787 Ответов: 2

Сжатие строки увеличение длины строки


всем привет
у меня есть одна функция, которая генерирует строку
эта нить очень длинная.
я хочу уменьшить его длину и размер

это мой код и результат:
не выкладывая настоящую строку она очень длинная
protected void Page_Load(object sender, EventArgs e)
    {
        string txt = "somestring";
        Label1.Text = txt.Length.ToString();
        string cmpString = Compress(txt);
        Label2.Text = cmpString.Length.ToString();
    }
 
//For Compression
    public 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;
            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);

    }

результат:
465832
667296

Что я уже пробовал:

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

Vani Kulkarni

В чем же вопрос?

MAU787

мой вопрос заключается в том что когда я сжимаю данные Длина этой строки должна уменьшаться она увеличивается
есть ли какое-то решение, потому что я хочу минимизировать его длину и размер

barneyman

вы забываете, что кодировка b64 добавляет 33% ?

MAU787

о, правда?
так что же я должен сделать, чтобы уменьшить его размер??

2 Ответов

Рейтинг:
4

_Amy

Привет,
Вы преобразуете свою строку в байт и снова отображаете ее в строковом формате?
Строковое представление байта в любом случае будет большим по длине и размеру. Храните его только в байтах.


--Амит


MAU787

спасибо за ответ

у вас есть справочный код для этого??

_Amy

Вы должны попробовать Гугл[^].

MAU787

спасибо
но я хотел передать только строку...я хочу уменьшить длину этой строки при передаче.

barneyman

ваши требования менее чем явны - но, может быть, вы хотите посмотреть на проходящих мимо ссылка?

Рейтинг:
1

OriginalGriff

Это не сжатие, это Base64.
Base64 берет строку байтовых значений (которая может содержать 256 различных значений) и преобразует ее в "текстовую дружественную" версию, которая может быть передана через текстовые протоколы, такие как JSON, XML и HTML. Он делает это, сохраняя 6 битов первого байта в первом выходном символе, оставшиеся 2 бита плюс 4 из следующего во второй, оставшиеся 4 плюс 2 из следующего в третий и оставшиеся 6 в четвертый.
Таким образом, за каждые три байта во входном потоке вы получаете четыре в выходном (плюс немного данных префикса и суффикса).

Даже если ваше сжатие работает хорошо, ваше преобразование в Base64 увеличит выход на четверть!


CHill60

Это на тебя не похоже! Проверьте дату публикации :-)
Хотя хороший пост!

OriginalGriff

Я пил свой первый кофе - но он появился в списке "вопросы" на первой странице (и все еще находится на втором месте).
Я предполагаю, что был добавлен спам-ответ / Комментарий, который "наткнулся" на него?

CHill60

Да, наверное. Он был поднят в Sugs & Bugs раньше, чем я думаю