Package org.codehaus.stax2.typed
Class Base64Variant
java.lang.Object
org.codehaus.stax2.typed.Base64Variant
This abstract base class is used to define specific details of which
variant of Base64 encoding/decoding is to be used. Although there is
somewhat standard basic version (so-called "MIME Base64"), other variants
exists, see Base64 Wikipedia entry for details.
Implementation notes:
- The main complication here is trying to limit access to the underlying efficient encoding/decoding tables -- they are needed for fast operation, but it is potentially risky to expose raw arrays since they can not be protected against modification. The approach here is to try to limit access essentially to the main base64 codec classes; but this leads to bit awkward class structure
- Since:
- 3.0.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final int[]Decoding table used for base 64 decoding.private final byte[]Alternative encoding table used for base 64 decoding when output is done as ascii bytes.private final char[]Encoding table used for base 64 decoding when output is done as characters.(package private) final intMaximum number of encoded base64 characters to output during encoding before adding a linefeed, if line length is to be limited (Integer.MAX_VALUEif not limited).(package private) final StringSymbolic name of variant; used for diagnostics/debugging.(package private) final charCharacted used for padding, if any (PADDING_CHAR_NONEif not).(package private) final booleanWhether this variant uses padding or not.static final intMarker used to denote ascii characters that do not correspond to a 6-bit value (in this variant), and is not used as a padding character.static final intMarker used to denote ascii character (in decoding table) that is the padding character using this variant (if any).(package private) static final charPlaceholder used by "no padding" variant, to be used when a character value is needed. -
Constructor Summary
ConstructorsConstructorDescriptionBase64Variant(String name, String base64Alphabet, boolean usesPadding, char paddingChar, int maxLineLength) Base64Variant(Base64Variant base, String name, boolean usesPadding, char paddingChar, int maxLineLength) "Copy constructor" that can be used when the base alphabet is identical to one used by another variant, but other details (padding, maximum line length) differBase64Variant(Base64Variant base, String name, int maxLineLength) "Copy constructor" that can be used when the base alphabet is identical to one used by another variant except for the maximum line length (and obviously, name). -
Method Summary
Modifier and TypeMethodDescriptionintdecodeBase64Byte(byte b) intdecodeBase64Char(char c) byteencodeBase64BitsAsByte(int value) charencodeBase64BitsAsChar(int value) intencodeBase64Chunk(int b24, byte[] buffer, int ptr) Method that encodes given right-aligned (LSB) 24-bit value into 4 base64 bytes (ascii), stored in given result buffer.intencodeBase64Chunk(int b24, char[] buffer, int ptr) Method that encodes given right-aligned (LSB) 24-bit value into 4 base64 characters, stored in given result buffer.intencodeBase64Partial(int bits, int outputBytes, byte[] buffer, int outPtr) Method that outputs partial chunk (which only encodes one or two bytes of data).intencodeBase64Partial(int bits, int outputBytes, char[] buffer, int outPtr) Method that outputs partial chunk (which only encodes one or two bytes of data).intgetName()bytechartoString()booleanbooleanusesPaddingChar(char c)
-
Field Details
-
PADDING_CHAR_NONE
static final char PADDING_CHAR_NONEPlaceholder used by "no padding" variant, to be used when a character value is needed.- See Also:
-
BASE64_VALUE_INVALID
public static final int BASE64_VALUE_INVALIDMarker used to denote ascii characters that do not correspond to a 6-bit value (in this variant), and is not used as a padding character.- See Also:
-
BASE64_VALUE_PADDING
public static final int BASE64_VALUE_PADDINGMarker used to denote ascii character (in decoding table) that is the padding character using this variant (if any).- See Also:
-
_asciiToBase64
private final int[] _asciiToBase64Decoding table used for base 64 decoding. -
_base64ToAsciiC
private final char[] _base64ToAsciiCEncoding table used for base 64 decoding when output is done as characters. -
_base64ToAsciiB
private final byte[] _base64ToAsciiBAlternative encoding table used for base 64 decoding when output is done as ascii bytes. -
_name
Symbolic name of variant; used for diagnostics/debugging. -
_usesPadding
final boolean _usesPaddingWhether this variant uses padding or not. -
_paddingChar
final char _paddingCharCharacted used for padding, if any (PADDING_CHAR_NONEif not). -
_maxLineLength
final int _maxLineLengthMaximum number of encoded base64 characters to output during encoding before adding a linefeed, if line length is to be limited (Integer.MAX_VALUEif not limited).Note: for some output modes (when writing attributes) linefeeds may need to be avoided, and this value ignored.
-
-
Constructor Details
-
Base64Variant
-
Base64Variant
"Copy constructor" that can be used when the base alphabet is identical to one used by another variant except for the maximum line length (and obviously, name). -
Base64Variant
public Base64Variant(Base64Variant base, String name, boolean usesPadding, char paddingChar, int maxLineLength) "Copy constructor" that can be used when the base alphabet is identical to one used by another variant, but other details (padding, maximum line length) differ
-
-
Method Details
-
getName
-
usesPadding
public boolean usesPadding() -
usesPaddingChar
public boolean usesPaddingChar(char c) -
getPaddingChar
public char getPaddingChar() -
getPaddingByte
public byte getPaddingByte() -
getMaxLineLength
public int getMaxLineLength() -
decodeBase64Char
public int decodeBase64Char(char c) - Returns:
- 6-bit decoded value, if valid character;
-
decodeBase64Byte
public int decodeBase64Byte(byte b) -
encodeBase64BitsAsChar
public char encodeBase64BitsAsChar(int value) -
encodeBase64Chunk
public int encodeBase64Chunk(int b24, char[] buffer, int ptr) Method that encodes given right-aligned (LSB) 24-bit value into 4 base64 characters, stored in given result buffer. -
encodeBase64Partial
public int encodeBase64Partial(int bits, int outputBytes, char[] buffer, int outPtr) Method that outputs partial chunk (which only encodes one or two bytes of data). Data given is still aligned same as if it as full data; that is, missing data is at the "right end" (LSB) of int.- Parameters:
outputBytes- Number of encoded bytes included (either 1 or 2)
-
encodeBase64BitsAsByte
public byte encodeBase64BitsAsByte(int value) -
encodeBase64Chunk
public int encodeBase64Chunk(int b24, byte[] buffer, int ptr) Method that encodes given right-aligned (LSB) 24-bit value into 4 base64 bytes (ascii), stored in given result buffer. -
encodeBase64Partial
public int encodeBase64Partial(int bits, int outputBytes, byte[] buffer, int outPtr) Method that outputs partial chunk (which only encodes one or two bytes of data). Data given is still aligned same as if it as full data; that is, missing data is at the "right end" (LSB) of int.- Parameters:
outputBytes- Number of encoded bytes included (either 1 or 2)
-
toString
-