You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by dl...@apache.org on 2002/05/30 18:14:30 UTC

cvs commit: jakarta-commons-sandbox/codec/src/java/org/apache/commons/codec/base64 Base64.java

dlr         02/05/30 09:14:30

  Modified:    codec/src/java/org/apache/commons/codec/base64 Base64.java
  Log:
  Integrated base64 encoding methods patch from Gidado-Yisa Immanuel
  <av...@cdc.gov>:
  
  "Adds 2 new methods for encoding strings plus a little refactoring."
  
  Revision  Changes    Path
  1.4       +80 -6     jakarta-commons-sandbox/codec/src/java/org/apache/commons/codec/base64/Base64.java
  
  Index: Base64.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/codec/src/java/org/apache/commons/codec/base64/Base64.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -u -r1.3 -r1.4
  --- Base64.java	7 Mar 2002 22:38:19 -0000	1.3
  +++ Base64.java	30 May 2002 16:14:30 -0000	1.4
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/codec/src/java/org/apache/commons/codec/base64/Base64.java,v 1.3 2002/03/07 22:38:19 dlr Exp $
  - * $Revision: 1.3 $
  - * $Date: 2002/03/07 22:38:19 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/codec/src/java/org/apache/commons/codec/base64/Base64.java,v 1.4 2002/05/30 16:14:30 dlr Exp $
  + * $Revision: 1.4 $
  + * $Date: 2002/05/30 16:14:30 $
    * ====================================================================
    *
    * The Apache Software License, Version 1.1
  @@ -60,6 +60,11 @@
   
   package org.apache.commons.codec.base64;
   
  +import java.io.ByteArrayOutputStream;
  +import java.io.OutputStreamWriter;
  +import java.io.IOException;
  +import java.io.UnsupportedEncodingException;
  +
   /**
    * <p>Base64 encoder and decoder.</p>
    * <p>
  @@ -71,10 +76,11 @@
    * 1996. Available at: http://www.ietf.org/rfc/rfc2045.txt
    * </p>
    * @author Jeffrey Rodriguez
  - * @version $Revision: 1.3 $ $Date: 2002/03/07 22:38:19 $
  + * @version $Revision: 1.4 $ $Date: 2002/05/30 16:14:30 $
    */
   public final class Base64 {
   
  +    static protected final String DEFAULT_CHAR_ENCODING = "ISO-8859-1";
       static private final int BASELENGTH = 255;
       static private final int LOOKUPLENGTH = 64;
       static private final int TWENTYFOURBITGROUP = 24;
  @@ -84,6 +90,7 @@
       static private final int FOURBYTE = 4;
       static private final int SIGN = -128;
       static private final byte PAD = (byte) '=';
  +    static private final byte[] EMPTY_BYTE_ARRAY = new byte[0];
       static private byte[] base64Alphabet = new byte[BASELENGTH];
       static private byte[] lookUpBase64Alphabet = new byte[LOOKUPLENGTH];
   
  @@ -149,6 +156,8 @@
        * @return Base64-encoded array
        */
       public static byte[] encode(byte[] binaryData) {
  +        if (binaryData == null)
  +            binaryData = EMPTY_BYTE_ARRAY;
   
           int lengthDataBits = binaryData.length * EIGHTBIT;
           int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP;
  @@ -218,6 +227,71 @@
   
   
       /**
  +     * Returns the base64 encoding of String.  First the String is
  +     * converted to byte[], using the character encoding of
  +     * <code>ISO-8859-1</code>.
  +     *
  +     * @param data String of data to convert
  +     * @return Base64-encoded String
  +     */
  +    public static String encode(String data) {
  +         try {
  +             return encode(data, DEFAULT_CHAR_ENCODING);
  +         }
  +         catch (UnsupportedEncodingException uee) {
  +             throw new IllegalStateException(uee.toString());
  +         }
  +     }
  +
  +
  +    /**
  +     * Returns the base64 encoding of String (by first converting to
  +     * byte[], using the specified <code>charEncoding</code>).  The
  +     * return value is also a String.  The Default
  +     * <code>codeEncoding</chode> is <code>ISO-8859-1</code>.
  +     *
  +     * @param data String of data to convert
  +     * @param charEncoding the character encoding to use when converting
  +     * a String to a byte[]
  +     * @return Base64-encoded String
  +     */
  +    public static String encode(String data, String charEncoding)
  +        throws UnsupportedEncodingException {
  +
  +        // Check arguments
  +        if (data == null)
  +            data = "";
  +        if (charEncoding == null)
  +            charEncoding = DEFAULT_CHAR_ENCODING;
  +
  +        // Convert to byte[]
  +        ByteArrayOutputStream bos = new ByteArrayOutputStream();
  +        OutputStreamWriter osw = new OutputStreamWriter(bos, charEncoding);
  +        try {
  +            osw.write(data);
  +        }
  +        catch (IOException ioe) {
  +            throw new RuntimeException(ioe.toString());
  +        }
  +
  +        // Encode
  +        byte[] encodedData = encode(bos.toByteArray());
  +
  +        // Convert to String
  +        if (encodedData==null)
  +            return "";
  +        bos = new ByteArrayOutputStream(encodedData.length);
  +        try {
  +            bos.write(encodedData);
  +        }
  +        catch (IOException ioe) {
  +            throw new RuntimeException(ioe.toString());
  +        }
  +
  +        return bos.toString(charEncoding);
  +    }
  +
  +    /**
        * Decodes Base64 data into octects
        *
        * @param binaryData Byte array containing Base64 data
  @@ -228,7 +302,7 @@
   
           // handle the edge case, so we don't have to worry about it later
           if (base64Data.length == 0) {
  -            return new byte[0];
  +            return EMPTY_BYTE_ARRAY;
           }
   
           int numberQuadruple = base64Data.length / FOURBYTE;
  @@ -243,7 +317,7 @@
               // ignore the '=' padding
               while (base64Data[lastData - 1] == PAD) {
                   if (--lastData == 0) {
  -                    return new byte[0];
  +                    return EMPTY_BYTE_ARRAY;
                   }
               }
               decodedData = new byte[lastData - numberQuadruple];
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>