2011-01-17 3 views
106

Если сервер получил строку base64 и хотел проверить его длину до преобразования, скажем, он всегда хотел, чтобы конечный массив байтов был 16 КБ. Насколько большой может быть массив байтов размером 16 Кбайт при преобразовании в строку Base64 (при условии, что один байт на символ)?Base64: Какое худшее увеличение использования пространства?

ответ

160

Base64 кодирует каждый набор из трех байтов в четыре байта. Кроме того, выход дополняется всегда кратным четырем.

Это означает, что размер представления базовой 64 строки размера п является:

ceil(n/3) * 4 

Таким образом, для массива 16kb, представление базового 64 будет CEIL (16 * 1024/3) * 4 = 21848 байтов ~ ~ 21,8 КБ.

A приблизительный пример: размер данных будет увеличен до 4/3 оригинала.

+13

Если n является целым числом на типизированном языке, то было бы немного быстрее избежать целого числа <--> float casts и вычислять '((n + 2)/3) * 4' –

+0

Нужно ли добавить 2 к длина или нет? – vIceBerg

+0

@vIceBerg. Это зависит от того, используете ли вы 'ceil' с номерами' float' или просто 'int'. (и не 'ceil') –

10

16kb - 131 072 бит. Base64 упаковывает 24-битные буферы в четыре 6-битных символа за штуку, поэтому у вас будет 5,462 * 4 = 21,848 байт.

24

От Wikipedia

Следует отметить, что данный входной сигнал из п байтов, выход будет (п + 2 - ((п + 2)% 3))/3 * 4 байта долго, так что количество выходных байтов на каждый входной байт сходится к 4/3 или 1.33333 для больших n.

Так что 16kb * 4/3 дает очень мало над 21,3 'kb, или 21848 байт, если быть точным.

Надеется, что это помогает

2

Поскольку речь шла о худшем возможном увеличении, я должен добавить, что, как правило, разрывы строк в вокруг каждых 80 символов. Это означает, что если вы сохраняете закодированные данные base64 в текстовый файл в Windows, он добавит 2 байта в 1 байт Linux для каждой строки.

Увеличение от фактического кодирования описано выше.

+0

Не является ли крайним случаем, что 1 байт источника становится 4 base64 байтами, поэтому увеличение 4 раза? Любой более длинный исходный материал получает лучшее соотношение, пока, как говорят другие, он асимптотически приближается к 1,333 ... – Olie

Смежные вопросы