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