blob: 895bc52e0800baaf3a0461bbe1d7d53756715a7c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.ide.dialogs;
/**
* 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();
}
}