2011-01-17 2 views

Antwort

160

Base64 codiert jeden Satz von drei Bytes in vier Bytes. Zusätzlich ist die Ausgabe so aufgefüllt, dass sie immer ein Vielfaches von vier ist.

Dies bedeutet, dass die Größe der Basis-64-Darstellung einer Zeichenfolge der Größe n ist:

ceil(n/3) * 4 

also für eine 16kB Array, wird die Basis-64-Darstellung sein ceil (16 * 1024/3) * 4 = 21848 Bytes lang ~ = 21,8 kB.

Eine grobe Annäherung wäre, dass die Größe der Daten auf 4/3 des Originals erhöht wird.

+13

Wenn n ist eine ganze Zahl in einer typisierten Sprache, dann wäre es ein wenig schneller vermeiden Sie die ganze Zahl <--> float wirft und berechnen '((n + 2)/3) * 4' –

+0

Müssen wir 2 zu den hinzufügen Länge oder nicht? – vIceBerg

+0

@vIceBerg, hängt davon ab, ob Sie 'ceil' mit' float' Zahlen oder nur 'int' Zahlen verwenden. (und keine 'ceil') –

10

16 KB ist 131.072 Bits. Base64 packt 24-Bit-Puffer in vier 6-Bit-Zeichen pro Stück, so dass Sie 5.462 * 4 = 21.848 Bytes haben.

24

Von Wikipedia

Hinweis, der eine Eingabe von n Bytes angegeben, wird die ausgegeben werden (n + 2 - ((n + 2)% 3))/3 * 4 Bytes lang, so dass die Anzahl der Ausgangsbytes pro Eingangsbyte konvergiert zu 4/3 oder 1.33333 für große n.

Also gibt 16kb * 4/3 sehr wenig über 21,3 'kb, oder 21848 Bytes, um genau zu sein.

this helps

2

Da die Frage nach der schlimmste mögliche Erhöhung war, muss ich hinzufügen, dass es in der Regel Zeilenumbrüche bei etwa je 80 Zeichen. Das bedeutet, wenn Sie base64-kodierte Daten unter Windows in eine Textdatei speichern, werden 2 Bytes hinzugefügt, bei Linux 1 Byte für jede Zeile.

Der Anstieg von der tatsächlichen Codierung wurde oben beschrieben.

+0

Ist nicht der Extremfall, dass 1 Quellbyte 4 base64 Byte wird, also 4x erhöhen? Jedes längere Quellmaterial bekommt ein besseres Verhältnis, bis es, wie andere gesagt haben, asymptotisch 1,333 ... – Olie