com.pixelmed.network
Class AssociationOutputStream

java.lang.Object
  extended by java.io.OutputStream
      extended by com.pixelmed.network.AssociationOutputStream
All Implemented Interfaces:
Closeable, Flushable

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
AssociationOutputStream(OutputStream out, int maxPDUSize, int presentationContextID, int debugLevel)
          Construct a PDU buffering OutputStream on top of another OutputStream
 
Method Summary
 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.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

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 - 0 for no debugging, > 0 for increasingly verbose debugging
Throws:
DicomNetworkException
Method Detail

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 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