web-dev-qa-db-ja.com

Base64:スペース使用量の最悪の増加は何ですか?

サーバーがbase64文字列を受信し、変換する前にその長さを確認したい場合は、最終バイト配列を常に16KBにすることを常に許可したいと言います。 Base64文字列に変換したときに、16KBバイト配列はどのくらい大きくなる可能性がありますか(文字ごとに1バイトと仮定)?

150
Bryan Field

Base64は、3バイトの各セットを4バイトにエンコードします。さらに、出力は常に4の倍数になるように埋め込まれます。

つまり、サイズnの文字列のbase-64表現のサイズは次のとおりです。

ceil(n / 3) * 4

そのため、16kB配列の場合、base-64表現はceil(16 * 1024/3)* 4 = 21848バイト長〜= 21.8kBになります。

大まかな近似は、データのサイズが元の4/3に増加することです。

220

から ウィキペディア

Nバイトの入力が与えられると、出力は(n + 2-((n + 2)%3))/ 3 * 4バイトの長さになるため、入力バイトあたりの出力バイト数は4/3に収束することに注意してください。または大きなnの場合は1.33333。

つまり、16kb * 4/3は、正確には21.3 'kb(21848バイト)をほとんど超えません。

お役に立てれば

32
Binary Worrier

16kbは131,072ビットです。 Base64は24ビットバッファを4つの6ビット文字にパックするため、5,462 * 4 = 21,848バイトになります。

10
Chris Heald

質問は可能な限り最悪の増加に関するものだったので、各80文字あたりに通常改行があることを付け加えなければなりません。これは、Windowsでbase64でエンコードされたデータをテキストファイルに保存する場合、Linuxでは各行に1バイトを追加することを意味します。

実際のエンコードからの増加については上記で説明しています。

5
Zsolt Sky