View Javadoc

1   /**
2    *
3    *  Licensed to the Apache Software Foundation (ASF) under one or more
4    *  contributor license agreements.  See the NOTICE file distributed with
5    *  this work for additional information regarding copyright ownership.
6    *  The ASF licenses this file to You under the Apache License, Version 2.0
7    *  (the "License"); you may not use this file except in compliance with
8    *  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, software
13   *  distributed under the License is distributed on an "AS IS" BASIS,
14   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   *  See the License for the specific language governing permissions and
16   *  limitations under the License.
17   */
18  
19  package org.apache.geronimo.util.encoders;
20  
21  import java.io.ByteArrayOutputStream;
22  import java.io.IOException;
23  import java.io.OutputStream;
24  
25  /**
26   * Convert binary data to and from UrlBase64 encoding.  This is identical to
27   * Base64 encoding, except that the padding character is "." and the other
28   * non-alphanumeric characters are "-" and "_" instead of "+" and "/".
29   * <p>
30   * The purpose of UrlBase64 encoding is to provide a compact encoding of binary
31   * data that is safe for use as an URL parameter. Base64 encoding does not
32   * produce encoded values that are safe for use in URLs, since "/" can be
33   * interpreted as a path delimiter; "+" is the encoded form of a space; and
34   * "=" is used to separate a name from the corresponding value in an URL
35   * parameter.
36   */
37  public class UrlBase64
38  {
39      private static final Encoder encoder = new UrlBase64Encoder();
40  
41      /**
42       * Encode the input data producing a URL safe base 64 encoded byte array.
43       *
44       * @return a byte array containing the URL safe base 64 encoded data.
45       */
46      public static byte[] encode(
47          byte[]    data)
48      {
49          ByteArrayOutputStream    bOut = new ByteArrayOutputStream();
50  
51          try
52          {
53              encoder.encode(data, 0, data.length, bOut);
54          }
55          catch (IOException e)
56          {
57              throw new RuntimeException("exception encoding URL safe base64 string: " + e);
58          }
59  
60          return bOut.toByteArray();
61      }
62  
63      /**
64       * Encode the byte data writing it to the given output stream.
65       *
66       * @return the number of bytes produced.
67       */
68      public static int encode(
69          byte[]                data,
70          OutputStream    out)
71          throws IOException
72      {
73          return encoder.encode(data, 0, data.length, out);
74      }
75  
76      /**
77       * Decode the URL safe base 64 encoded input data - white space will be ignored.
78       *
79       * @return a byte array representing the decoded data.
80       */
81      public static byte[] decode(
82          byte[]    data)
83      {
84          ByteArrayOutputStream    bOut = new ByteArrayOutputStream();
85  
86          try
87          {
88              encoder.decode(data, 0, data.length, bOut);
89          }
90          catch (IOException e)
91          {
92              throw new RuntimeException("exception decoding URL safe base64 string: " + e);
93          }
94  
95          return bOut.toByteArray();
96      }
97  
98      /**
99       * decode the URL safe base 64 encoded byte data writing it to the given output stream,
100      * whitespace characters will be ignored.
101      *
102      * @return the number of bytes produced.
103      */
104     public static int decode(
105         byte[]                data,
106         OutputStream    out)
107         throws IOException
108     {
109         return encoder.decode(data, 0, data.length, out);
110     }
111 
112     /**
113      * decode the URL safe base 64 encoded String data - whitespace will be ignored.
114      *
115      * @return a byte array representing the decoded data.
116      */
117     public static byte[] decode(
118         String    data)
119     {
120         ByteArrayOutputStream    bOut = new ByteArrayOutputStream();
121 
122         try
123         {
124             encoder.decode(data, bOut);
125         }
126         catch (IOException e)
127         {
128             throw new RuntimeException("exception decoding URL safe base64 string: " + e);
129         }
130 
131         return bOut.toByteArray();
132     }
133 
134     /**
135      * Decode the URL safe base 64 encoded String data writing it to the given output stream,
136      * whitespace characters will be ignored.
137      *
138      * @return the number of bytes produced.
139      */
140     public static int decode(
141         String                data,
142         OutputStream    out)
143         throws IOException
144     {
145         return encoder.decode(data, out);
146     }
147 }