netcom.util
Class WrappedOutputStream

java.lang.Object
  extended byjava.io.OutputStream
      extended byjava.io.FilterOutputStream
          extended bynetcom.util.WrappedOutputStream

public class WrappedOutputStream
extends java.io.FilterOutputStream

This output stream works in conjunction with the WrappedInputStream to introduce a protocol for sending arbitrary length data in a uniform way. This output stream allows variable length data to be inserted into an existing output stream so that it can be read by an input stream without reading too many bytes (in case of buffering by the input stream).

This output stream is used like any normal output stream. The protocol is introduced by the WrappedOutputStream and does not need to be known by the user of this class. However, for those that are interested, the method is described below.

The output stream writes the requested bytes as packets of binary information. The packet consists of a header and payload. The header is two bytes of a single unsigned short (written in network order) that specifies the length of bytes in the payload. A header value of 0 indicates that the stream is "closed".

Note: For this wrapped output stream to be used, the application must call close() to end the output.

See Also:
WrappedInputStream

Field Summary
static int DEFAULT_BUFFER_SIZE
          Default buffer size (1024).
protected  byte[] fBuffer
          Buffer.
protected  java.io.DataOutputStream fDataOutputStream
          Data output stream.
protected  int fPosition
          Buffer position.
 
Fields inherited from class java.io.FilterOutputStream
out
 
Constructor Summary
WrappedOutputStream(java.io.OutputStream stream)
          Constructs a wrapper for the given output stream.
WrappedOutputStream(java.io.OutputStream stream, int bufferSize)
          Constructs a wrapper for the given output stream with the given buffer size.
 
Method Summary
 void close()
          Closes the output stream.
 void flush()
          Flushes the output buffer, writing all bytes currently in the buffer to the output.
 void flush0()
          Flushes the output buffer, writing all bytes currently in the buffer to the output.
 void write(byte[] b, int offset, int length)
          Writes an array of bytes to the output.
 void write(int b)
          Writes a single byte to the output.
 
Methods inherited from class java.io.FilterOutputStream
write
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_BUFFER_SIZE

public static final int DEFAULT_BUFFER_SIZE
Default buffer size (1024).

See Also:
Constant Field Values

fBuffer

protected byte[] fBuffer
Buffer.


fPosition

protected int fPosition
Buffer position.


fDataOutputStream

protected java.io.DataOutputStream fDataOutputStream
Data output stream. This stream is used to output the block sizes into the data stream that are read by the WrappedInputStream.

Note: The data output stream is only used for writing the byte count for performance reasons. We avoid the method indirection for writing the byte data.

Constructor Detail

WrappedOutputStream

public WrappedOutputStream(java.io.OutputStream stream)
Constructs a wrapper for the given output stream.


WrappedOutputStream

public WrappedOutputStream(java.io.OutputStream stream,
                           int bufferSize)
Constructs a wrapper for the given output stream with the given buffer size.

Method Detail

write

public void write(int b)
           throws java.io.IOException
Writes a single byte to the output.

Note: Single bytes written to the output stream will be buffered

Throws:
java.io.IOException

write

public void write(byte[] b,
                  int offset,
                  int length)
           throws java.io.IOException
Writes an array of bytes to the output.

Throws:
java.io.IOException

flush

public void flush()
           throws java.io.IOException
Flushes the output buffer, writing all bytes currently in the buffer to the output.

Throws:
java.io.IOException

close

public void close()
           throws java.io.IOException
Closes the output stream. This method must be called when done writing all data to the output stream.

Note: This method does not close the actual output stream, only makes the input stream see the stream closed. Do not write bytes after closing the output stream.

Throws:
java.io.IOException

flush0

public void flush0()
            throws java.io.IOException
Flushes the output buffer, writing all bytes currently in the buffer to the output. This method does not call the flush() method of the output stream; it merely writes the remaining bytes in the buffer.

Throws:
java.io.IOException