Class WrappedOutputStream

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

    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

      Fields 
      Modifier and Type Field Description
      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

      Constructors 
      Constructor Description
      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

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      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.io.OutputStream

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

        Overrides:
        write in class java.io.FilterOutputStream
        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.
        Overrides:
        write in class java.io.FilterOutputStream
        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.
        Specified by:
        flush in interface java.io.Flushable
        Overrides:
        flush in class java.io.FilterOutputStream
        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.

        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Overrides:
        close in class java.io.FilterOutputStream
        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