public class Base64 extends Object
sun.misc.Encoder()/Decoder().
On byte arrays the encoder is about 20% faster than Jakarta Commons Base64
Codec for encode and about 50% faster for decoding large arrays. This
implementation is about twice as fast on very small arrays (less than 30
bytes).
If source/destination is a String this version is about three
times as fast due to the fact that the Commons Codec result has to be recoded
to a String from byte[], which is very expensive.
This encode/decode algorithm doesn't create any temporary arrays as many
other codecs do, it only allocates the resulting array. This produces less
garbage and it is possible to handle arrays twice as large as algorithms that
create a temporary array. (E.g. Jakarta Commons Codec). It is unknown whether
Sun's sun.misc.Encoder()/Decoder() produce temporary arrays but
since performance is quite low it probably does.
The encoder produces the same output as the Sun one except that the Sun's
encoder appends a trailing line separator if the last character isn't a pad.
Unclear why but it only adds to the length and is probably a side effect.
Both are in conformance with RFC 2045 though.| Constructor and Description |
|---|
Base64() |
| Modifier and Type | Method and Description |
|---|---|
static boolean |
containsOnlyBase64Chars(byte[] bytes,
int offset,
int len) |
static byte[] |
decode(byte[] sArr)
Decodes a BASE64 encoded byte array.
|
static byte[] |
decode(char[] sArr)
Decodes a BASE64 encoded char array.
|
static byte[] |
decode(String str)
Decodes a BASE64 encoded
String. |
static byte[] |
decodeFast(byte[] sArr)
Decodes a BASE64 encoded byte array that is known to be reasonably well formatted.
|
static byte[] |
decodeFast(char[] sArr)
Decodes a BASE64 encoded char array that is known to be resonably well formatted.
|
static byte[] |
decodeFast(String s)
Decodes a BASE64 encoded string that is known to be resonably well formatted.
|
static byte[] |
encodeToByte(byte[] sArr)
The same #encodeToByte(byte[], false)}.
|
static byte[] |
encodeToByte(byte[] sArr,
boolean lineSep)
Encodes a raw byte array into a BASE64
byte[] representation i accordance with
RFC 2045. |
static char[] |
encodeToChar(byte[] sArr)
The same as encodeToChar(byte[], false)
|
static char[] |
encodeToChar(byte[] sArr,
boolean lineSep)
Encodes a raw byte array into a BASE64
char[] representation i accordance with
RFC 2045. |
static String |
encodeToString(byte[] sArr)
The same as encodeToString(byte[], false).
|
static String |
encodeToString(byte[] sArr,
boolean lineSep)
Encodes a raw byte array into a BASE64
String representation i accordance with
RFC 2045. |
public static final boolean containsOnlyBase64Chars(byte[] bytes,
int offset,
int len)
public static final char[] encodeToChar(byte[] sArr)
sArr - The bytes to convert. If null or length 0, an empty array will be
returned.public static final char[] encodeToChar(byte[] sArr,
boolean lineSep)
char[] representation i accordance with
RFC 2045.sArr - The bytes to convert. If null or length 0 an empty array will be
returned.lineSep - Optional "\r\n" after 76 characters, unless end of file.null.public static final byte[] decode(char[] sArr)
sArr - The source array. null or length 0 will return an empty array.IllegalArgumentException - If the legal characters (including '=') isn't divideable by 4.
(I.e. definitely corrupted).public static final byte[] decodeFast(char[] sArr)
decode(char[]). The preconditions are:sArr - The source array. Length 0 will return an empty array. null will throw
an exception.public static final byte[] encodeToByte(byte[] sArr)
sArr - The bytes to convert. If null or length 0 an empty array will be
returned.null.public static final byte[] encodeToByte(byte[] sArr,
boolean lineSep)
byte[] representation i accordance with
RFC 2045.sArr - The bytes to convert. If null or length 0 an empty array will be
returned.lineSep - Optional "\r\n" after 76 characters, unless end of file.null.public static final byte[] decode(byte[] sArr)
sArr - The source array. Length 0 will return an empty array. null will throw
an exception.IllegalArgumentException - If the legal characters (including '=') isn't divideable by 4.
(I.e. definitely corrupted).public static final byte[] decodeFast(byte[] sArr)
decode(byte[]). The preconditions are:sArr - The source array. Length 0 will return an empty array. null will throw
an exception.public static final String encodeToString(byte[] sArr)
sArr - The bytes to convert. If null or length 0 an empty array will be
returned.null.public static final String encodeToString(byte[] sArr, boolean lineSep)
String representation i accordance with
RFC 2045.sArr - The bytes to convert. If null or length 0 an empty array will be
returned.lineSep - Optional "\r\n" after 76 characters, unless end of file.null.public static final byte[] decode(String str)
String. All illegal characters will be ignored and can
handle both strings with and without line separators.decode(str.toCharArray()) instead. That will create a temporary array though.
This version will use str.charAt(i) to iterate the string.str - The source string. null or length 0 will return an empty array.IllegalArgumentException - If the legal characters (including '=') isn't divideable by 4.
(I.e. definitely corrupted).public static final byte[] decodeFast(String s)
decode(String). The preconditions are:s - The source string. Length 0 will return an empty array. null will
throw an exception.Copyright © 2019. All rights reserved.