blob: baf6d6a1b982607a8bd33b1e5fb659d957ed3b51 [file] [log] [blame]
package org.eclipse.ui.internal.dialogs;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
/**
* This utility class converts a passed byte array into a Base 64 encoded
* String according to the specification in RFC1521 section 5.2
*/
/*package*/ class InternalBase64Encoder {
private static final String mappings = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";//$NON-NLS-1$
private static final String filler = "=";//$NON-NLS-1$
/**
* Answer a string representing the Base 64 encoded form of the passed
* byte array
*
* @return java.lang.String
* @param contents byte[]
*/
public static String encode(byte[] contents) {
StringBuffer result = new StringBuffer();
for (int i = 0; i < contents.length; i = i + 3) {
if (result.length() == 76)
result.append("\n\r");//$NON-NLS-1$
// output character 1
result.append(mappings.charAt((contents[i] & 0xFC) >> 2));
// output character 2
int c2 = (contents[i] & 0x03) << 4;
if (i + 1 >= contents.length) {
result.append(mappings.charAt(c2));
result.append(filler);
result.append(filler);
return result.toString();
}
c2 |= ((contents[i + 1] & 0xF0) >> 4);
result.append(mappings.charAt(c2));
// output character 3
int c3 = (contents[i + 1] & 0x0F) << 2;
if (i + 2 >= contents.length) {
result.append(mappings.charAt(c3));
result.append(filler);
return result.toString();
}
c3 |= ((contents[i + 2] & 0xC0) >> 6);
result.append(mappings.charAt(c3));
// output character 4
result.append(mappings.charAt(contents[i + 2] & 0x3F));
}
return result.toString();
}
}