001 /**
002 *
003 * Licensed to the Apache Software Foundation (ASF) under one or more
004 * contributor license agreements. See the NOTICE file distributed with
005 * this work for additional information regarding copyright ownership.
006 * The ASF licenses this file to You under the Apache License, Version 2.0
007 * (the "License"); you may not use this file except in compliance with
008 * the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019 package org.apache.geronimo.util.encoders;
020
021 import java.io.ByteArrayOutputStream;
022 import java.io.IOException;
023 import java.io.OutputStream;
024
025 public class Base64
026 {
027 private static final Encoder encoder = new Base64Encoder();
028
029 /**
030 * encode the input data producing a base 64 encoded byte array.
031 *
032 * @return a byte array containing the base 64 encoded data.
033 */
034 public static byte[] encode(
035 byte[] data)
036 {
037 ByteArrayOutputStream bOut = new ByteArrayOutputStream();
038
039 try
040 {
041 encoder.encode(data, 0, data.length, bOut);
042 }
043 catch (IOException e)
044 {
045 throw new RuntimeException("exception encoding base64 string: " + e);
046 }
047
048 return bOut.toByteArray();
049 }
050
051 /**
052 * Encode the byte data to base 64 writing it to the given output stream.
053 *
054 * @return the number of bytes produced.
055 */
056 public static int encode(
057 byte[] data,
058 OutputStream out)
059 throws IOException
060 {
061 return encoder.encode(data, 0, data.length, out);
062 }
063
064 /**
065 * Encode the byte data to base 64 writing it to the given output stream.
066 *
067 * @return the number of bytes produced.
068 */
069 public static int encode(
070 byte[] data,
071 int off,
072 int length,
073 OutputStream out)
074 throws IOException
075 {
076 return encoder.encode(data, off, length, out);
077 }
078
079 /**
080 * decode the base 64 encoded input data. It is assumed the input data is valid.
081 *
082 * @return a byte array representing the decoded data.
083 */
084 public static byte[] decode(
085 byte[] data)
086 {
087 ByteArrayOutputStream bOut = new ByteArrayOutputStream();
088
089 try
090 {
091 encoder.decode(data, 0, data.length, bOut);
092 }
093 catch (IOException e)
094 {
095 throw new RuntimeException("exception decoding base64 string: " + e);
096 }
097
098 return bOut.toByteArray();
099 }
100
101 /**
102 * decode the base 64 encoded String data - whitespace will be ignored.
103 *
104 * @return a byte array representing the decoded data.
105 */
106 public static byte[] decode(
107 String data)
108 {
109 ByteArrayOutputStream bOut = new ByteArrayOutputStream();
110
111 try
112 {
113 encoder.decode(data, bOut);
114 }
115 catch (IOException e)
116 {
117 throw new RuntimeException("exception decoding base64 string: " + e);
118 }
119
120 return bOut.toByteArray();
121 }
122
123 /**
124 * decode the base 64 encoded String data writing it to the given output stream,
125 * whitespace characters will be ignored.
126 *
127 * @return the number of bytes produced.
128 */
129 public static int decode(
130 String data,
131 OutputStream out)
132 throws IOException
133 {
134 return encoder.decode(data, out);
135 }
136 }