質問: ファイルを塊でbase64エンコードすることは可能ですか? 私は、base64で巨大な入力ファイルをエンコードしようとしていて、テキスト出力ファイルで終わります。入力ファイルをビット単位でエンコードすることが可能かどうか、またはエンコードする必要があるかどうかを調べようとしていますすぐに事。 これは、AS/400(iSeries)で行われます。私は自分のベース64エンコーディングルーチン(RPGで書かれています)を使っています。これはうまく動作し、サイズ制限の場合ではありませんでした。
回答: 任意のバイトストリームをチャンクに分割するのは簡単な作業です。 任意のバイトのチャンクを問題なくbase64することができます。 あなたが直面している問題は、チャンク(3バイトの倍数)に特定の要件を置かない限り、base64でエンコードされたチャンクのシーケンスが実際の出力と異なることです。 C#では、これはあなたがそれをゆっくりと行うことができる1つ(ちょっとした)方法です。実行は実際にはstring.Concatが呼び出されるまで延期されるので、チャンクされた文字列で必要な処理を行うことができます。 (これをLINQPadに接続すると出力が表示されます) ``` void Main() { var data = "lorum ipsum etc lol this is an example!!"; var bytes = Encoding.ASCII.GetBytes(data); var testFinal = Convert.ToBase64String(bytes); var chunkedBytes = bytes.Chunk(3); var base64chunks = chunkedBytes.Select(i => Convert.ToBase64String(i.ToArray())); var final = string.Concat(base64chunks); testFinal.Dump(); //出力 final.Dump(); //出力 } public static class Extensions { public static IEnumerable> Chunk(this IEnumerable list, int chunkSize) { while(list.Take(1).Count() > 0) { yield return list.Take(chunkSize); list = list.Skip(chunkSize); } } } ``` 出力 ``` bG9ydW0gaXBzdW0gZXRjIGxvbCB0aGlzIGlzIGFuIGV4YW1wbGUhIQ== bG9ydW0gaXBzdW0gZXRjIGxvbCB0aGlzIGlzIGFuIGV4YW1wbGUhIQ== ```