Jika server menerima string base64 dan ingin memeriksa panjangnya sebelum mengonversi ,, katakan itu ingin selalu mengizinkan array byte terakhir menjadi 16KB. Seberapa besar susunan byte 16KB bila dikonversi ke string Base64 (dengan asumsi satu byte per karakter)?
167
ceil
denganfloat
angka, atau hanyaint
angka. (dan tidakceil
)Dari Wikipedia
Jadi 16kb * 4/3 memberikan sangat sedikit lebih dari 21,3 'kb, atau 21848 byte, tepatnya.
Semoga ini membantu
sumber
16kb adalah 131.072 bit. Base64 mengemas buffer 24-bit menjadi empat karakter masing-masing 6-bit, sehingga Anda akan memiliki 5.462 * 4 = 21.848 byte.
sumber
Karena pertanyaannya adalah tentang kemungkinan peningkatan terburuk, saya harus menambahkan bahwa biasanya ada jeda baris sekitar 80 karakter. Ini berarti bahwa jika Anda menyimpan data yang disandikan base64 ke dalam file teks pada Windows itu akan menambah 2 byte, di Linux 1 byte untuk setiap baris.
Peningkatan dari pengkodean aktual telah dijelaskan di atas.
sumber
Ini referensi masa depan untuk saya sendiri. Karena pertanyaannya adalah yang terburuk kasus , kita harus mempertimbangkan jeda baris. Sementara RFC 1421 mendefinisikan panjang garis maksimum menjadi 64 char, RFC 2045 (MIME) menyatakan akan ada 76 char dalam satu baris paling banyak.
Yang terakhir adalah apa yang telah diimplementasikan oleh perpustakaan C #. Jadi di lingkungan Windows di mana satu baris adalah 2 karakter (\ r \ n), kita mendapatkan ini:
Length = Floor(Ceiling(N/3) * 4 * 78 / 76)
Catatan: Lantai adalah karena selama pengujian saya dengan C #, jika baris terakhir berakhir tepat pada 76 karakter, tidak ada garis-istirahat yang mengikuti.
Saya bisa membuktikannya dengan menjalankan kode berikut:
Jawaban untuk 16 kBytes dikodekan ke base64 dengan garis 76-char: 22422 karakter
Asumsikan di Linux itu akan
Length = Floor(Ceiling(N/3) * 4 * 77 / 76)
tetapi saya belum sempat mengujinya pada .NET core saya.sumber