Wenn ein Server eine Base64-Zeichenfolge empfangen hat und die Länge vor der Konvertierung überprüfen wollte, sollte das letzte Byte-Array immer 16 KB haben. Wie groß könnte ein 16-KByte-Byte-Array werden, wenn es in eine Base64-Zeichenfolge konvertiert wird (unter der Annahme, dass ein Byte pro Zeichen vorhanden ist)?Base64: Was ist der schlimmstmögliche Anstieg der Speicherplatznutzung?
Antwort
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.
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.
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
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.
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
- 1. Was ist der Vorteil der Base64-Codierung?
- 2. Was ist der eigentliche Zweck der Base64-Codierung?
- 3. Scala Objekte und der Anstieg von Singletons
- 4. SQL Wählen Sie den höchsten Anstieg der Aktivität im Zeitraum
- 5. Timeout-Problem verursacht Anstieg der Verbindungen in Weblogic
- 6. Was ist der Zweck der Hex-Codierung für Binärdaten?
- 7. Wie programmiere ich programmatisch meine PermGen-Speicherplatznutzung?
- 8. Was ist der PictureListener?
- 9. Was ist der DataContractTranslator?
- 10. Was ist der Verwendungszweck?
- 11. Was ist der Tastenanschlag?
- 12. Was ist der @ Operator?
- 13. Was ist der DNVM?
- 14. berechnen prozentualen Anstieg in Power
- 15. Was ist der Zweck der WCF-Sitzung?
- 16. Was ist der wichtige Teil der Suchtechnologie?
- 17. Arten der Montage - was ist der Unterschied
- 18. Was ist der Zweck der `Pass` Aussage?
- 19. Was ist der Zweck der CRX-Datei?
- 20. Was ist der Punkt der Auffüllung?
- 21. Was ist der Zweck der Prozedur Verknüpfungstabelle?
- 22. Was ist der Zweck der SQL-Sprache?
- 23. Was ist der Zweck der Annotation @ ConditionalOnProperty?
- 24. Was ist der Wert in der Enum?
- 25. Was ist der BigO der linearen Regression?
- 26. Was ist der Zweck der Einheitslinse?
- 27. Was ist der Zweck der statischen hier?
- 28. Was ist der Zweck der Winkel-Sanitize?
- 29. Was ist der Zweck der WS-Adressierung?
- 30. Was ist der Zweck der Akka Erweiterung?
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' –
Müssen wir 2 zu den hinzufügen Länge oder nicht? – vIceBerg
@vIceBerg, hängt davon ab, ob Sie 'ceil' mit' float' Zahlen oder nur 'int' Zahlen verwenden. (und keine 'ceil') –