Package com.pixelmed.network

## Class AssociationOutputStream

- java.lang.Object
- - java.io.OutputStream
  - - com.pixelmed.network.AssociationOutputStream

- All Implemented Interfaces:
    `java.io.Closeable`, `java.io.Flushable`, `java.lang.AutoCloseable`

      public class AssociationOutputStream
      extends java.io.OutputStream

  A specialized java.io.OutputStream which buffers and fragments data which is written to it into PDUs and sends them over the supplied OutputStream which is (presumably) that of the java.net.Socket of an established `Association`.

  This stream buffers data that is written to it and when it is either flushed or closed or reaches the specified maximum PDU size, writes data (not command) PDU's to the supplied output stream.

  Need to take care with "last fragment" flag ... that cannot be set until close() is called, and if the buffer is empty at that time, a zero length PDU will be sent.

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `AssociationOutputStream​(java.io.OutputStream out, int maxPDUSize, int presentationContextID, int debugLevel)` | Construct a PDU buffering OutputStream on top of another OutputStream

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `close()` | Sets the last fragment flag and flushes (which sends a zero length PDU if necessary, and pads to an even length, if necessary).
    `void` | `flush()` | Do nothing.
    `void` | `write​(byte[] b)` | Buffer the supplied data, flushing (actually sending) PDUs when the buffer is filled.
    `void` | `write​(byte[] b, int off, int len)` | Buffer the supplied data, flushing (actually sending) PDUs when the buffer is filled.
    `void` | `write​(int i)` | Buffer the supplied data, flushing (actually sending) PDUs when the buffer is filled.

    - ### Methods inherited from class java.io.OutputStream

      `nullOutputStream`

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

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

- - ### Constructor Detail

    - #### AssociationOutputStream

          public AssociationOutputStream​(java.io.OutputStream out,
                                         int maxPDUSize,
                                         int presentationContextID,
                                         int debugLevel)
                                  throws DicomNetworkException

      Construct a PDU buffering OutputStream on top of another OutputStream
      Parameters:
        `out` - where to send the buffered output
        `maxPDUSize` - how large to make the buffer (i.e. the PDU) size
        `presentationContextID` - included in the header of each PDU
        `debugLevel` - 0 for no debugging, > 0 for increasingly verbose debugging
      Throws:
        `DicomNetworkException`

  - ### Method Detail

    - #### write

          public void write​(int i)
                     throws java.io.IOException

      Buffer the supplied data, flushing (actually sending) PDUs when the buffer is filled.
      Specified by:
        `write` in class `java.io.OutputStream`
      Parameters:
        `i` -
      Throws:
        `java.io.IOException`

    - #### write

          public void write​(byte[] b)
                     throws java.io.IOException

      Buffer the supplied data, flushing (actually sending) PDUs when the buffer is filled.
      Overrides:
        `write` in class `java.io.OutputStream`
      Parameters:
        `b` -
      Throws:
        `java.io.IOException`

    - #### write

          public void write​(byte[] b,
                            int off,
                            int len)
                     throws java.io.IOException

      Buffer the supplied data, flushing (actually sending) PDUs when the buffer is filled.
      Overrides:
        `write` in class `java.io.OutputStream`
      Parameters:
        `b` -
        `off` -
        `len` -
      Throws:
        `java.io.IOException`

    - #### close

          public void close()
                     throws java.io.IOException

      Sets the last fragment flag and flushes (which sends a zero length PDU if necessary, and pads to an even length, if necessary). Does NOT actually close the underlying stream, since that may well be used for other operations later.
      Specified by:
        `close` in interface `java.lang.AutoCloseable`
      Specified by:
        `close` in interface `java.io.Closeable`
      Overrides:
        `close` in class `java.io.OutputStream`
      Throws:
        `java.io.IOException`

    - #### flush

          public void flush()
                     throws java.io.IOException

      Do nothing.
      Specified by:
        `flush` in interface `java.io.Flushable`
      Overrides:
        `flush` in class `java.io.OutputStream`
      Throws:
        `java.io.IOException`