Description
Decodes a byte array from Base64 format.
License
Open Source License
Parameter
Parameter | Description |
---|
in | A character array containing the Base64 encoded data. |
iOff | Offset of the first character in <code>in</code> to be processed. |
iLen | Number of characters to process in <code>in</code>, starting at <code>iOff</code>. |
Exception
Parameter | Description |
---|
IllegalArgumentException | If the input is not valid Base64 encoded data. |
Return
An array containing the decoded data bytes.
Declaration
public static byte[] base64Decode(String s)
Method Source Code
//package com.java2s;
/*//from w w w . j a v a 2 s.c o m
* Copyright 2003-2010 Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland
* www.source-code.biz, www.inventec.ch/chdh
*
* This module is multi-licensed and may be used under the terms of any of the following licenses:
*
* EPL, Eclipse Public License, V1.0 or later, http://www.eclipse.org/legal
* LGPL, GNU Lesser General Public License, V2.1 or later, http://www.gnu.org/licenses/lgpl.html
* GPL, GNU General Public License, V2 or later, http://www.gnu.org/licenses/gpl.html
* AL, Apache License, V2.0 or later, http://www.apache.org/licenses
* BSD, BSD License, http://www.opensource.org/licenses/bsd-license.php
* MIT, MIT License, http://www.opensource.org/licenses/MIT
*
* Please contact the author if you need another license.
* This module is provided "as is", without warranties of any kind.
*
* For the purposes of Mace Swinger, we are using the MIT license
*/
public class Main {
private static final byte[] map2 = new byte[128];
/**
* Decodes a byte array from Base64 format. No blanks or line breaks are allowed within the Base64 encoded input data.
*
* @param in
* A character array containing the Base64 encoded data.
* @param iOff
* Offset of the first character in <code>in</code> to be processed.
* @param iLen
* Number of characters to process in <code>in</code>, starting at <code>iOff</code>.
* @return An array containing the decoded data bytes.
* @throws IllegalArgumentException
* If the input is not valid Base64 encoded data.
*/
public static byte[] base64Decode(String s) {
char[] in = s.toCharArray();
int iOff = 0;
int iLen = s.toCharArray().length;
if (iLen % 4 != 0)
throw new IllegalArgumentException("Length of Base64 encoded input string is not a multiple of 4.");
while (iLen > 0 && in[iOff + iLen - 1] == '=')
iLen--;
int oLen = (iLen * 3) / 4;
byte[] out = new byte[oLen];
int ip = iOff;
int iEnd = iOff + iLen;
int op = 0;
while (ip < iEnd) {
int i0 = in[ip++];
int i1 = in[ip++];
int i2 = ip < iEnd ? in[ip++] : 'A';
int i3 = ip < iEnd ? in[ip++] : 'A';
if (i0 > 127 || i1 > 127 || i2 > 127 || i3 > 127)
throw new IllegalArgumentException("Illegal character in Base64 encoded data.");
int b0 = map2[i0];
int b1 = map2[i1];
int b2 = map2[i2];
int b3 = map2[i3];
if (b0 < 0 || b1 < 0 || b2 < 0 || b3 < 0)
throw new IllegalArgumentException("Illegal character in Base64 encoded data.");
int o0 = (b0 << 2) | (b1 >>> 4);
int o1 = ((b1 & 0xf) << 4) | (b2 >>> 2);
int o2 = ((b2 & 3) << 6) | b3;
out[op++] = (byte) o0;
if (op < oLen)
out[op++] = (byte) o1;
if (op < oLen)
out[op++] = (byte) o2;
}
return out;
}
}
Related
- base64Decode(String base64Str)
- base64Decode(String data)
- base64Decode(String input)
- base64Decode(String s)
- base64Decode(String s)
- base64decode(String s)
- base64Decode(String str)
- base64Decode(String str)
- Base64Decode(String str)