int outputSize = calculateOutputSize(inputData.length);
char[] outputData = new char[outputSize];
int inputIndex = 0;
int outputIndex = 0;
while (inputIndex < inputData.length) {
int octetA = inputData[inputIndex++] & 0xFF;
int octetB = inputData[inputIndex++] & 0xFF;
int octetC = inputData[inputIndex++] & 0xFF;
outputData[outputIndex++] = base64Table[(triple >> 18) & 0x3F];
outputData[outputIndex++] = base64Table[(triple >> 12) & 0x3F];
outputData[outputIndex++] = base64Table[(triple >> 6) & 0x3F];
outputData[outputIndex++] = base64Table[triple & 0x3F];
}
String base64Result = new String(outputData);
from("direct:input")
.marshal().base64()
.streamCaching()
.to("direct:output");