Auf Thema antworten

Habe es nun mit folgender Klasse gelöst:


Der Vorteil ist, dass ich keine externe JAR einbinden muss :toll:


[code=Java]

public class Base64Coding

{

  private final static char[] ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();

  private static int[] toInt = new int[128];

 

  static

  {

    for (int i = 0; i < ALPHABET.length; i++)

    {

      toInt[ALPHABET[i]] = i;

    }

  }

 

  /**

   * Codiert das übergeben Byte[] in einen Base64-String

   *    *

   * @param Byte[] welches codiert werden soll

   * @return Der Base64-Codierte String

   */

  public static String encode(byte[] buf)

  {

     

    int size = buf.length;

    char[] ar = new char[((size + 2) / 3) * 4];

    int a = 0;

    int i = 0;

    while (i < size)

    {

      byte b0 = buf[i++];

      byte b1 = (i < size) ? buf[i++] : 0;

      byte b2 = (i < size) ? buf[i++] : 0;

 

      int mask = 0x3F;

      ar[a++] = ALPHABET[(b0 >> 2) & mask];

      ar[a++] = ALPHABET[((b0 << 4) | ((b1 & 0xFF) >> 4)) & mask];

      ar[a++] = ALPHABET[((b1 << 2) | ((b2 & 0xFF) >> 6)) & mask];

      ar[a++] = ALPHABET[b2 & mask];

    }

    switch (size % 3)

    {

      case 1:

        ar[--a] = '=';

      case 2:

        ar[--a] = '=';

    }

    return new String(ar);

  }

 

  /**

   * Decodiert einen Base64-Codierte String in einen "normalen" String

   *

   * @param base64 Der Base64-Codierte String.

   * @return Der Base64-decodierte String.

   */

  public static String decode(String base64)

  {

    int delta = base64.endsWith("==") ? 2 : base64.endsWith("=") ? 1 : 0;

    byte[] buffer = new byte[base64.length() * 3 / 4 - delta];

    int mask = 0xFF;

    int index = 0;

    for (int i = 0; i < base64.length(); i += 4)

    {

      int c0 = toInt[base64.charAt(i)];

      int c1 = toInt[base64.charAt(i + 1)];

      buffer[index++] = (byte) (((c0 << 2) | (c1 >> 4)) & mask);

      if (index >= buffer.length)

      {

        return new String(buffer);

      }

      int c2 = toInt[base64.charAt(i + 2)];

      buffer[index++] = (byte) (((c1 << 4) | (c2 >> 2)) & mask);

      if (index >= buffer.length)

      {

        return new String(buffer);

      }

      int c3 = toInt[base64.charAt(i + 3)];

      buffer[index++] = (byte) (((c2 << 6) | c3) & mask);

    }

    return new String(buffer);

  }

}

[/code]



Oben