public abstract class BaseNCodec extends java.lang.Object implements BinaryEncoder, BinaryDecoder
This class is not thread-safe. Each thread should use its own instance.
Modifier and Type | Field and Description |
---|---|
protected byte[] |
buffer
Buffer for streaming.
|
private int |
chunkSeparatorLength
Size of chunk separator.
|
protected int |
currentLinePos
Variable tracks how many characters have been written to the current line.
|
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.
|
protected boolean |
eof
Boolean flag to indicate the EOF has been reached.
|
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 int |
modulus
Writes to the buffer only occur after every 3/5 reads when encoding, and every 4/8 reads when decoding.
|
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.
|
protected int |
pos
Position where next character should be written in the buffer.
|
private int |
readPos
Position where next character should be read from the buffer.
|
private int |
unencodedBlockSize
Number of bytes in each full block of unencoded data, e.g.
|
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()
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) |
java.lang.Object |
decode(java.lang.Object pObject)
Decodes an Object using the Base-N algorithm.
|
byte[] |
decode(java.lang.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) |
java.lang.Object |
encode(java.lang.Object pObject)
Encodes an Object using the Base-N algorithm.
|
java.lang.String |
encodeAsString(byte[] pArray)
Encodes a byte[] containing binary data, into a String containing characters in the appropriate alphabet.
|
java.lang.String |
encodeToString(byte[] pArray)
Encodes a byte[] containing binary data, into a String containing characters in the Base-N alphabet.
|
protected void |
ensureBufferSize(int size)
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()
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(java.lang.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)
Extracts buffered data into the provided byte[] array, starting at position bPos,
up to a maximum of bAvail bytes.
|
private void |
reset()
Resets this object to its initial newly constructed state.
|
private void |
resizeBuffer()
Increases our buffer by the
DEFAULT_BUFFER_RESIZE_FACTOR . |
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 byte[] buffer
protected int pos
private int readPos
protected boolean eof
protected int currentLinePos
protected int modulus
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()
int available()
protected int getDefaultBufferSize()
DEFAULT_BUFFER_SIZE
private void resizeBuffer()
DEFAULT_BUFFER_RESIZE_FACTOR
.protected void ensureBufferSize(int size)
size
bytessize
- minimum spare space requiredint readResults(byte[] b, int bPos, int bAvail)
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).protected static boolean isWhiteSpace(byte byteToCheck)
byteToCheck
- the byte to checkprivate void reset()
public java.lang.Object encode(java.lang.Object pObject) throws EncoderException
encode
in interface Encoder
pObject
- Object to encodeEncoderException
- if the parameter supplied is not of type byte[]public java.lang.String encodeToString(byte[] pArray)
pArray
- a byte array containing binary datapublic java.lang.Object decode(java.lang.Object pObject) throws DecoderException
decode
in interface Decoder
pObject
- Object to decodeDecoderException
- if the parameter supplied is not of type byte[]public byte[] decode(java.lang.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 datapublic java.lang.String encodeAsString(byte[] pArray)
pArray
- a byte array containing binary dataabstract void encode(byte[] pArray, int i, int length)
abstract void decode(byte[] pArray, int i, int length)
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(java.lang.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 encodedcommons-codec version 1.6-SNAPSHOT - Copyright © 2002-2012 - Apache Software Foundation