View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *  http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  
20  package org.apache.geronimo.mail.util;
21  
22  import java.io.ByteArrayOutputStream;
23  import java.io.IOException;
24  import java.io.OutputStream;
25  
26  public class Base64
27  {
28      private static final Encoder encoder = new Base64Encoder();
29  
30      /**
31       * encode the input data producing a base 64 encoded byte array.
32       *
33       * @return a byte array containing the base 64 encoded data.
34       */
35      public static byte[] encode(
36          byte[]    data)
37      {
38          // just forward to the general array encoder. 
39          return encode(data, 0, data.length); 
40      }
41  
42      /**
43       * encode the input data producing a base 64 encoded byte array.
44       * 
45       * @param data   The data array to encode.
46       * @param offset The starting offset within the data array.
47       * @param length The length of the data to encode.
48       * 
49       * @return a byte array containing the base 64 encoded data.
50       */
51      public static byte[] encode(
52          byte[]    data,
53          int       offset, 
54          int       length)
55      {
56          ByteArrayOutputStream    bOut = new ByteArrayOutputStream();
57  
58          try
59          {
60              encoder.encode(data, 0, data.length, bOut);
61          }
62          catch (IOException e)
63          {
64              throw new RuntimeException("exception encoding base64 string: " + e);
65          }
66  
67          return bOut.toByteArray();
68      }
69  
70      /**
71       * Encode the byte data to base 64 writing it to the given output stream.
72       *
73       * @return the number of bytes produced.
74       */
75      public static int encode(
76          byte[]                data,
77          OutputStream    out)
78          throws IOException
79      {
80          return encoder.encode(data, 0, data.length, out);
81      }
82  
83      /**
84       * Encode the byte data to base 64 writing it to the given output stream.
85       *
86       * @return the number of bytes produced.
87       */
88      public static int encode(
89          byte[]                data,
90          int                    off,
91          int                    length,
92          OutputStream    out)
93          throws IOException
94      {
95          return encoder.encode(data, off, length, out);
96      }
97  
98      /**
99       * decode the base 64 encoded input data. It is assumed the input data is valid.
100      *
101      * @return a byte array representing the decoded data.
102      */
103     public static byte[] decode(
104         byte[]    data)
105     {
106         // just decode the entire array of data. 
107         return decode(data, 0, data.length); 
108     }
109     
110 
111     /**
112      * decode the base 64 encoded input data. It is assumed the input data is valid.
113      * 
114      * @param data   The data array to decode.
115      * @param offset The offset of the data array.
116      * @param length The length of data to decode.
117      * 
118      * @return a byte array representing the decoded data.
119      */
120     public static byte[] decode(
121         byte[]    data, 
122         int       offset, 
123         int       length)
124     {
125         ByteArrayOutputStream    bOut = new ByteArrayOutputStream();
126 
127         try
128         {
129             encoder.decode(data, offset, length, bOut);
130         }
131         catch (IOException e)
132         {
133             throw new RuntimeException("exception decoding base64 string: " + e);
134         }
135 
136         return bOut.toByteArray();
137     }
138 
139     /**
140      * decode the base 64 encoded String data - whitespace will be ignored.
141      *
142      * @return a byte array representing the decoded data.
143      */
144     public static byte[] decode(
145         String    data)
146     {
147         ByteArrayOutputStream    bOut = new ByteArrayOutputStream();
148 
149         try
150         {
151             encoder.decode(data, bOut);
152         }
153         catch (IOException e)
154         {
155             throw new RuntimeException("exception decoding base64 string: " + e);
156         }
157 
158         return bOut.toByteArray();
159     }
160 
161     /**
162      * decode the base 64 encoded String data writing it to the given output stream,
163      * whitespace characters will be ignored.
164      *
165      * @return the number of bytes produced.
166      */
167     public static int decode(
168         String                data,
169         OutputStream    out)
170         throws IOException
171     {
172         return encoder.decode(data, out);
173     }
174 
175     /**
176      * decode the base 64 encoded String data writing it to the given output stream,
177      * whitespace characters will be ignored.
178      *
179      * @param data   The array data to decode.
180      * @param out    The output stream for the data.
181      *
182      * @return the number of bytes produced.
183      * @exception IOException
184      */
185     public static int decode(byte [] data, OutputStream out) throws IOException
186     {
187         return encoder.decode(data, 0, data.length, out);
188     }
189 }