Jeśli serwer otrzymał łańcuch base64 i chciał sprawdzić jego długość przed konwersją, powiedzmy, że chciał, aby końcowa tablica bajtów zawsze miała 16 KB. Jak duża może być tablica bajtów 16 KB po przekonwertowaniu na łańcuch Base64 (zakładając, że jeden bajt na znak)?
168
ceil
zfloat
numerami, lub po prostuint
numery. (i nieceil
)Z Wikipedii
Zatem 16 kb * 4/3 daje niewiele ponad 21,3 kb, czyli, mówiąc ściślej, 21848 bajtów.
Mam nadzieję że to pomoże
źródło
16 kb to 131072 bity. Base64 pakuje 24-bitowe bufory w cztery 6-bitowe znaki, więc masz 5462 * 4 = 21848 bajtów.
źródło
Ponieważ pytanie dotyczyło najgorszego możliwego wzrostu, muszę dodać, że zazwyczaj są przerwy między wierszami co około 80 znaków. Oznacza to, że jeśli zapisujesz dane zakodowane w base64 do pliku tekstowego w systemie Windows, doda to 2 bajty, w systemie Linux 1 bajt na każdy wiersz.
Wzrost w stosunku do faktycznego kodowania został opisany powyżej.
źródło
To jest dla mnie odniesienie w przyszłości. Ponieważ pytanie jest najgorsze przypadku, powinniśmy wziąć pod uwagę podziały wierszy. Podczas gdy RFC 1421 definiuje maksymalną długość linii na 64 znaki, RFC 2045 (MIME) stwierdza, że w jednym wierszu będzie maksymalnie 76 znaków.
To ostatnie jest tym, co zaimplementowała biblioteka C #. Więc w środowisku Windows, gdzie koniec linii to 2 znaki (\ r \ n), otrzymujemy to:
Length = Floor(Ceiling(N/3) * 4 * 78 / 76)
Uwaga: Podłoga jest taka, ponieważ podczas mojego testu z C #, jeśli ostatnia linia kończy się dokładnie na 76 znakach, nie następuje podział linii.
Mogę to udowodnić, uruchamiając następujący kod:
Odpowiedź dla 16 KB zakodowanych do base64 z 76-znakowymi liniami: 22422 znaków
Załóżmy, że w Linuksie tak będzie,
Length = Floor(Ceiling(N/3) * 4 * 77 / 76)
ale nie udało mi się jeszcze przetestować tego na moim .NET core.źródło