FileDocCategorySizeDatePackage
Base64Util.javaAPI DocAndroid 1.5 API4447Wed May 06 22:42:46 BST 2009com.beetstra.jutf7

Base64Util

public class Base64Util extends Object

Represent a base 64 mapping. The 64 characters used in the encoding can be specified, since modified-UTF-7 uses other characters than UTF-7 (',' instead of '/').

The exact type of the arguments and result values is adapted to the needs of the encoder and decoder, as opposed to following a strict interpretation of base 64.

Base 64, as specified in RFC 2045, is an encoding used to encode bytes as characters. In (modified-)UTF-7 however, it is used to encode characters as bytes, using some intermediate steps:

  1. Encode all characters as a 16-bit (UTF-16) integer value
  2. Write this as stream of bytes (most-significant first)
  3. Encode these bytes using (modified) base 64 encoding
  4. Write the thus formed stream of characters as a stream of bytes, using ASCII encoding
author
Jaap Beetstra

Fields Summary
private static final int
ALPHABET_LENGTH
private final char[]
alphabet
private final int[]
inverseAlphabet
Constructors Summary
Base64Util(String alphabet)
Initializes the class with the specified encoding/decoding alphabet.

param
alphabet
throws
IllegalArgumentException if alphabet is not 64 characters long or contains characters which are not 7-bit ASCII


                                                 
       
        this.alphabet = alphabet.toCharArray();
        if (alphabet.length() != ALPHABET_LENGTH)
            throw new IllegalArgumentException("alphabet has incorrect length (should be 64, not "
                    + alphabet.length() + ")");
        inverseAlphabet = new int[128];
        Arrays.fill(inverseAlphabet, -1);
        for (int i = 0; i < this.alphabet.length; i++) {
            final char ch = this.alphabet[i];
            if (ch >= 128)
                throw new IllegalArgumentException("invalid character in alphabet: " + ch);
            inverseAlphabet[ch] = i;
        }
    
Methods Summary
booleancontains(char ch)
Tells whether the alphabet contains the specified character.

param
ch The character
return
true if the alphabet contains ch, false otherwise

        if (ch >= 128)
            return false;
        return inverseAlphabet[ch] >= 0;
    
bytegetChar(int sextet)
Encodes the six bit group as a character.

param
sextet The six bit group to be encoded
return
The ASCII value of the character

        return (byte)alphabet[sextet];
    
intgetSextet(byte ch)
Returns the integer value of the six bits represented by the specified character.

param
ch The character, as a ASCII encoded byte
return
The six bits, as an integer value, or -1 if the byte is not in the alphabet

        if (ch >= 128)
            return -1;
        return inverseAlphabet[ch];