ビットごと ではなく、 3バイトずつ、または3バイトの倍数で実行できます!
つまり、あなたの入力ファイルを3バイトの倍数である "チャンク"で分割すると、チャンクを別々にエンコードして、結果のB64エンコードされたピースを一緒にまとめることができます(対応するordeのもちろん、最後のchuinkは3バイトの倍数である必要はありません。サイズのモジュロ3の値に応じて、対応するB64値にはこれらのパディング文字(通常は等号)がいくつかありますが、それは問題ありません。そのような詰め物がある(そして必要とする)唯一のものであるからです。
デコード方向では、B64でエンコードされたデータを4バイトの倍数に分割する必要がある点を除いて、同じ考え方です。それらをパラレル/個別に希望どおりにデコードし、デコードされた部分を一緒に(同じ順序で)追加して元のデータを再作成します。
例:
"File" contents =
"Never argue with the data." (Jimmy Neutron)
.
Straight encoding = Ik5ldmVyIGFyZ3VlIHdpdGggdGhlIGRhdGEuIiAoSmltbXkgTmV1dHJvbik=
Now, in chunks:
"Never argue
--> Ik5ldmVyIGFyZ3Vl
with the
--> IHdpdGggdGhl
data." (Jimmy Neutron)
--> IGRhdGEuIiAoSmltbXkgTmV1dHJvbik=
あなたがその順序でピースを見るので、3つのコード化されたチャンクは、ファイル全体に対して生成されたコードと同じです。
デコードは、4バイトの倍数であれば、任意のチャンクサイズで同様に行われます。エンコーディングに使用されるサイズの間には、どんな種類の対応も絶対に必要ありません。 (ただし、各方向(たとえば300と400)で単一のサイズに標準化することで、より均一で管理しやすくなります。