DLSequenceGenerator (Bouncy Castle Library 1.85 API Specification)
Date: 2026-07-12

org.bouncycastle.asn1

## Class DLSequenceGenerator

- java.lang.Object
- - org.bouncycastle.asn1.ASN1Generator
  - - org.bouncycastle.asn1.DLGenerator
    - - org.bouncycastle.asn1.DLSequenceGenerator

-     public class DLSequenceGenerator
      extends DLGenerator

  A stream generator for definite-length SEQUENCEs. The caller commits to the total length of the SEQUENCE body up front; the header is written immediately and the body then streams through `getRawOutputStream()` / `addObject(ASN1Encodable)`. `close()` verifies the body came out at exactly the promised length and throws an `IOException` otherwise — by then the output is not usable, but every length mismatch is a caller arithmetic bug that must not pass silently.

  Unlike `DERSequenceGenerator` nothing is buffered, so the body may exceed the size of a Java array; the trade-off is that the length has to be known before any content is produced.

- - ### Field Summary

    - ### Fields inherited from class org.bouncycastle.asn1.ASN1Generator

      `_out`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DLSequenceGenerator(java.io.OutputStream out, int tagNo, boolean isExplicit, long bodyLength)` Use the passed in stream as the target for the generator, writing out the header for a tagged definite-length constructed SEQUENCE (possibly implicit).
    `DLSequenceGenerator(java.io.OutputStream out, long bodyLength)` Use the passed in stream as the target for the generator, writing out the header for a definite-length constructed SEQUENCE.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addObject(ASN1Encodable object)` Add the DL encoding of the passed in object to the SEQUENCE body.
    `void` | `close()` Verify the declared body length was written in full.
    `java.io.OutputStream` | `getRawOutputStream()` Return the target stream for the SEQUENCE body.

    - ### Methods inherited from class org.bouncycastle.asn1.DLGenerator

      `getDLEncodingLength, getLengthOctetCount, writeDLHeader`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### DLSequenceGenerator

          public DLSequenceGenerator(java.io.OutputStream out,
                                     long bodyLength)
                              throws java.io.IOException

      Use the passed in stream as the target for the generator, writing out the header for a definite-length constructed SEQUENCE.
      Parameters:
        `out` - target stream
        `bodyLength` - the exact number of content octets that will be written
      Throws:
        `java.io.IOException` - if the target stream cannot be written to.

    - #### DLSequenceGenerator

          public DLSequenceGenerator(java.io.OutputStream out,
                                     int tagNo,
                                     boolean isExplicit,
                                     long bodyLength)
                              throws java.io.IOException

      Use the passed in stream as the target for the generator, writing out the header for a tagged definite-length constructed SEQUENCE (possibly implicit).
      Parameters:
        `out` - target stream
        `tagNo` - the tag number to introduce
        `isExplicit` - true if this is an explicitly tagged object, false otherwise.
        `bodyLength` - the exact number of content octets that will be written
      Throws:
        `java.io.IOException` - if the target stream cannot be written to.

  - ### Method Detail

    - #### getRawOutputStream

          public java.io.OutputStream getRawOutputStream()

      Return the target stream for the SEQUENCE body. Writes are counted against the length declared at construction; writing past it fails immediately.
      Overrides:
        `getRawOutputStream` in class `DLGenerator`
      Returns:
        the stream that is directly encoded to.

    - #### addObject

          public void addObject(ASN1Encodable object)
                         throws java.io.IOException

      Add the DL encoding of the passed in object to the SEQUENCE body.
      Throws:
        `java.io.IOException`

    - #### close

          public void close()
                     throws java.io.IOException

      Verify the declared body length was written in full.
      Throws:
        `java.io.IOException` - if fewer content octets were written than declared.