public abstract class DLGenerator extends ASN1Generator
BER generators, which stream indefinite-length
encodings, these write a definite-length header up front from a
caller-supplied body length and so can stream DL (and, with suitably
canonical contents, DER) encodings of structures too large to hold in
memory — body lengths are long, so content larger than a Java array
can carry is supported.
The body length passed to a generator is a commitment: the matching
number of content octets must subsequently be written. Subclasses verify
this on close() and fail with an
IOException on a mismatch, since a wrongly-sized body silently
corrupts every enclosing length.
_out| Modifier | Constructor and Description |
|---|---|
protected |
DLGenerator(java.io.OutputStream out) |
protected |
DLGenerator(java.io.OutputStream out,
int tagNo,
boolean isExplicit) |
| Modifier and Type | Method and Description |
|---|---|
static long |
getDLEncodingLength(long bodyLength)
Return the total encoded length of a TLV with a single identifier octet
(i.e. a tag number below 31) and
bodyLength content octets. |
static int |
getLengthOctetCount(long bodyLength)
Return the number of octets in the definite-length encoding of
bodyLength (the length octets only, excluding the identifier). |
java.io.OutputStream |
getRawOutputStream()
Return the actual stream object encodings are written to.
|
protected void |
writeDLHeader(int tag,
long bodyLength)
Write the definite-length header(s) for this generator's structure:
the base tag with
bodyLength, preceded (for an explicit tag) by
a context-specific wrapper whose length covers the complete base TLV. |
protected DLGenerator(java.io.OutputStream out)
protected DLGenerator(java.io.OutputStream out,
int tagNo,
boolean isExplicit)
public java.io.OutputStream getRawOutputStream()
ASN1GeneratorgetRawOutputStream in class ASN1Generatorpublic static int getLengthOctetCount(long bodyLength)
bodyLength (the length octets only, excluding the identifier).bodyLength - number of content octets (>= 0)public static long getDLEncodingLength(long bodyLength)
bodyLength content octets.bodyLength - number of content octets (>= 0)protected void writeDLHeader(int tag,
long bodyLength)
throws java.io.IOException
bodyLength, preceded (for an explicit tag) by
a context-specific wrapper whose length covers the complete base TLV.
Tag numbers of 31 and above are supported for the context-specific
wrapper of an implicitly tagged structure, but not for an explicit one
(the wrapper length arithmetic assumes a single identifier octet).java.io.IOException