サーバーがbase64文字列を受信し、変換する前にその長さを確認したい場合は、最終バイト配列を常に16KBにすることを常に許可したいと言います。 Base64文字列に変換したときに、16KBバイト配列はどのくらい大きくなる可能性がありますか(文字ごとに1バイトと仮定)?
Base64は、3バイトの各セットを4バイトにエンコードします。さらに、出力は常に4の倍数になるように埋め込まれます。
つまり、サイズnの文字列のbase-64表現のサイズは次のとおりです。
ceil(n / 3) * 4
そのため、16kB配列の場合、base-64表現はceil(16 * 1024/3)* 4 = 21848バイト長〜= 21.8kBになります。
大まかな近似は、データのサイズが元の4/3に増加することです。
から ウィキペディア
Nバイトの入力が与えられると、出力は(n + 2-((n + 2)%3))/ 3 * 4バイトの長さになるため、入力バイトあたりの出力バイト数は4/3に収束することに注意してください。または大きなnの場合は1.33333。
つまり、16kb * 4/3は、正確には21.3 'kb(21848バイト)をほとんど超えません。
お役に立てれば
16kbは131,072ビットです。 Base64は24ビットバッファを4つの6ビット文字にパックするため、5,462 * 4 = 21,848バイトになります。
質問は可能な限り最悪の増加に関するものだったので、各80文字あたりに通常改行があることを付け加えなければなりません。これは、Windowsでbase64でエンコードされたデータをテキストファイルに保存する場合、Linuxでは各行に1バイトを追加することを意味します。
実際のエンコードからの増加については上記で説明しています。