Package com.pixelmed.network

# Class AssociationOutputStream

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

All Implemented Interfaces:
  `Closeable`, `Flushable`, `AutoCloseable`

public class AssociationOutputStream extends 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(OutputStream out, int maxPDUSize, int presentationContextID)`
Construct a PDU buffering OutputStream on top of another OutputStream
`AssociationOutputStream(OutputStream out, int maxPDUSize, int presentationContextID, int debugLevel)`
Construct a PDU buffering OutputStream on top of another OutputStream

## Method Summary

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, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### AssociationOutputStream

public AssociationOutputStream(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` - ignored
Throws:
  `DicomNetworkException`

### AssociationOutputStream

public AssociationOutputStream(OutputStream out, int maxPDUSize, int presentationContextID) 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
Throws:
  `DicomNetworkException`

## Method Details

### write

public void write(int i) throws IOException
Buffer the supplied data, flushing (actually sending) PDUs when the buffer is filled.

Specified by:
  `write` in class `OutputStream`
Parameters:
  `i` -
Throws:
  `IOException`

### write

public void write(byte[] b) throws IOException
Buffer the supplied data, flushing (actually sending) PDUs when the buffer is filled.

Overrides:
  `write` in class `OutputStream`
Parameters:
  `b` -
Throws:
  `IOException`

### write

public void write(byte[] b, int off, int len) throws IOException
Buffer the supplied data, flushing (actually sending) PDUs when the buffer is filled.

Overrides:
  `write` in class `OutputStream`
Parameters:
  `b` -
  `off` -
  `len` -
Throws:
  `IOException`

### close

public void close() throws 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 `AutoCloseable`
Specified by:
  `close` in interface `Closeable`
Overrides:
  `close` in class `OutputStream`
Throws:
  `IOException`

### flush

public void flush() throws IOException
Do nothing.

Specified by:
  `flush` in interface `Flushable`
Overrides:
  `flush` in class `OutputStream`
Throws:
  `IOException`