public void ToBase64Writer(TextWriter sw)
{
if (TotalSize == 0)
return;
var tmpBuf = new byte[3];
var base64 = CharBuffer;
var total = TotalSize >> BlockShift;
var remaining = TotalSize & BlockAnd;
int len = 0;
var off = 0;
for (int i = 0; i < total; i++)
{
var block = Blocks[i];
len = Convert.ToBase64CharArray(block, off, BlockSize - 2, base64, 0);
sw.Write(base64, 0, len);
for (int j = 0; j < 2 - off; j++)
tmpBuf[j] = block[BlockSize - 2 + j + off];
block = Blocks[i + 1];
for (int j = 0; j < 1 + off; j++)
tmpBuf[2 - off + j] = block[j];
len = Convert.ToBase64CharArray(tmpBuf, 0, 3, base64, 0);
sw.Write(base64, 0, len);
off = (off + 1) & 3;
}
len = Convert.ToBase64CharArray(Blocks[total], off, remaining != 0 ? remaining - off : BlockSize, base64, 0);
sw.Write(base64, 0, len);
sw.Flush();
}