public abstract class BaseNCodec extends Object implements BinaryEncoder, BinaryDecoder
This class is thread-safe.
Modifier and Type | Class and Description |
---|---|
(package private) static class |
BaseNCodec.Context
Holds thread context so classes can be thread-safe.
|
Modifier and Type | Field and Description |
---|---|
private int |
chunkSeparatorLength
Size of chunk separator.
|
private static int |
DEFAULT_BUFFER_RESIZE_FACTOR |
private static int |
DEFAULT_BUFFER_SIZE
Defines the default buffer size - currently 8192
- must be large enough for at least one encoded block+separator
|
private int |
encodedBlockSize
Number of bytes in each full block of encoded data, e.g. 3 for Base64 and 8 for Base32
|
(package private) static int |
EOF
EOF
|
protected int |
lineLength
Chunksize for encoding.
|
protected static int |
MASK_8BITS
Mask used to extract 8 bits, used in decoding bytes
|
static int |
MIME_CHUNK_SIZE
MIME chunk size per RFC 2045 section 6.8.
|
protected byte |
PAD |
protected static byte |
PAD_DEFAULT
Byte used to pad output.
|
static int |
PEM_CHUNK_SIZE
PEM chunk size per RFC 1421 section 4.3.2.4.
|
private int |
unencodedBlockSize
Number of bytes in each full block of unencoded data, e.g. 4 for Base64 and 5 for Base32
|
Modifier | Constructor and Description |
---|---|
protected |
BaseNCodec(int unencodedBlockSize,
int encodedBlockSize,
int lineLength,
int chunkSeparatorLength)
Note
lineLength is rounded down to the nearest multiple of encodedBlockSize
If chunkSeparatorLength is zero, then chunking is disabled. |
Modifier and Type | Method and Description |
---|---|
(package private) int |
available(BaseNCodec.Context context)
Returns the amount of buffered data available for reading.
|
protected boolean |
containsAlphabetOrPad(byte[] arrayOctet)
Tests a given byte array to see if it contains any characters within the alphabet or PAD.
|
byte[] |
decode(byte[] pArray)
Decodes a byte[] containing characters in the Base-N alphabet.
|
(package private) abstract void |
decode(byte[] pArray,
int i,
int length,
BaseNCodec.Context context) |
Object |
decode(Object obj)
Decodes an Object using the Base-N algorithm.
|
byte[] |
decode(String pArray)
Decodes a String containing characters in the Base-N alphabet.
|
byte[] |
encode(byte[] pArray)
Encodes a byte[] containing binary data, into a byte[] containing characters in the alphabet.
|
(package private) abstract void |
encode(byte[] pArray,
int i,
int length,
BaseNCodec.Context context) |
Object |
encode(Object obj)
Encodes an Object using the Base-N algorithm.
|
String |
encodeAsString(byte[] pArray)
Encodes a byte[] containing binary data, into a String containing characters in the appropriate alphabet.
|
String |
encodeToString(byte[] pArray)
Encodes a byte[] containing binary data, into a String containing characters in the Base-N alphabet.
|
protected byte[] |
ensureBufferSize(int size,
BaseNCodec.Context context)
Ensure that the buffer has room for
size bytes |
protected int |
getDefaultBufferSize()
Get the default buffer size.
|
long |
getEncodedLength(byte[] pArray)
Calculates the amount of space needed to encode the supplied array.
|
(package private) boolean |
hasData(BaseNCodec.Context context)
Returns true if this object has buffered data for reading.
|
protected abstract boolean |
isInAlphabet(byte value)
Returns whether or not the
octet is in the current alphabet. |
boolean |
isInAlphabet(byte[] arrayOctet,
boolean allowWSPad)
Tests a given byte array to see if it contains only valid characters within the alphabet.
|
boolean |
isInAlphabet(String basen)
Tests a given String to see if it contains only valid characters within the alphabet.
|
protected static boolean |
isWhiteSpace(byte byteToCheck)
Checks if a byte value is whitespace or not.
|
(package private) int |
readResults(byte[] b,
int bPos,
int bAvail,
BaseNCodec.Context context)
Extracts buffered data into the provided byte[] array, starting at position bPos, up to a maximum of bAvail
bytes.
|
private byte[] |
resizeBuffer(BaseNCodec.Context context)
Increases our buffer by the
DEFAULT_BUFFER_RESIZE_FACTOR . |
static final int EOF
public static final int MIME_CHUNK_SIZE
The 76 character limit does not count the trailing CRLF, but counts all other characters, including any equal signs.
public static final int PEM_CHUNK_SIZE
The 64 character limit does not count the trailing CRLF, but counts all other characters, including any equal signs.
private static final int DEFAULT_BUFFER_RESIZE_FACTOR
private static final int DEFAULT_BUFFER_SIZE
protected static final int MASK_8BITS
protected static final byte PAD_DEFAULT
protected final byte PAD
private final int unencodedBlockSize
private final int encodedBlockSize
protected final int lineLength
private final int chunkSeparatorLength
lineLength
> 0.protected BaseNCodec(int unencodedBlockSize, int encodedBlockSize, int lineLength, int chunkSeparatorLength)
lineLength
is rounded down to the nearest multiple of encodedBlockSize
If chunkSeparatorLength
is zero, then chunking is disabled.unencodedBlockSize
- the size of an unencoded block (e.g. Base64 = 3)encodedBlockSize
- the size of an encoded block (e.g. Base64 = 4)lineLength
- if > 0, use chunking with a length lineLength
chunkSeparatorLength
- the chunk separator length, if relevantboolean hasData(BaseNCodec.Context context)
context
- the context to be usedint available(BaseNCodec.Context context)
context
- the context to be usedprotected int getDefaultBufferSize()
DEFAULT_BUFFER_SIZE
private byte[] resizeBuffer(BaseNCodec.Context context)
DEFAULT_BUFFER_RESIZE_FACTOR
.context
- the context to be usedprotected byte[] ensureBufferSize(int size, BaseNCodec.Context context)
size
bytessize
- minimum spare space requiredcontext
- the context to be usedint readResults(byte[] b, int bPos, int bAvail, BaseNCodec.Context context)
Package protected for access from I/O streams.
b
- byte[] array to extract the buffered data into.bPos
- position in byte[] array to start extraction at.bAvail
- amount of bytes we're allowed to extract. We may extract fewer (if fewer are available).context
- the context to be usedprotected static boolean isWhiteSpace(byte byteToCheck)
byteToCheck
- the byte to checkpublic Object encode(Object obj) throws EncoderException
encode
in interface Encoder
obj
- Object to encodeEncoderException
- if the parameter supplied is not of type byte[]public String encodeToString(byte[] pArray)
pArray
- a byte array containing binary datapublic String encodeAsString(byte[] pArray)
pArray
- a byte array containing binary datapublic Object decode(Object obj) throws DecoderException
decode
in interface Decoder
obj
- Object to decodeDecoderException
- if the parameter supplied is not of type byte[]public byte[] decode(String pArray)
pArray
- A String containing Base-N character datapublic byte[] decode(byte[] pArray)
decode
in interface BinaryDecoder
pArray
- A byte array containing Base-N character datapublic byte[] encode(byte[] pArray)
encode
in interface BinaryEncoder
pArray
- a byte array containing binary dataabstract void encode(byte[] pArray, int i, int length, BaseNCodec.Context context)
abstract void decode(byte[] pArray, int i, int length, BaseNCodec.Context context)
protected abstract boolean isInAlphabet(byte value)
octet
is in the current alphabet.
Does not allow whitespace or pad.value
- The value to testtrue
if the value is defined in the current alphabet, false
otherwise.public boolean isInAlphabet(byte[] arrayOctet, boolean allowWSPad)
arrayOctet
- byte array to testallowWSPad
- if true
, then whitespace and PAD are also allowedtrue
if all bytes are valid characters in the alphabet or if the byte array is empty;
false
, otherwisepublic boolean isInAlphabet(String basen)
basen
- String to testtrue
if all characters in the String are valid characters in the alphabet or if
the String is empty; false
, otherwiseisInAlphabet(byte[], boolean)
protected boolean containsAlphabetOrPad(byte[] arrayOctet)
arrayOctet
- byte array to testtrue
if any byte is a valid character in the alphabet or PAD; false
otherwisepublic long getEncodedLength(byte[] pArray)
pArray
- byte[] array which will later be encodedWebARTS Library Licensed Under the GNU - General Public License. Other Libraries licensed under their respective Open Source Licenses