The nsIStorageStream interface maintains an internal data buffer that can be
 filled using a single output stream.  One or more independent input streams
 can be created to read the data from the buffer non-destructively.
[scriptable, uuid(604ad9d0-753e-11d3-90ca-34278643278f)]
interface nsIStorageStream : nsISupports

Attributes

 
 The length attribute indicates the total number of bytes stored in the
 nsIStorageStream internal buffer, regardless of any consumption by input
 streams.  Assigning to the length field can be used to truncate the
 buffer data, but can not be used when either the instance's output
 stream is in use.

 @See #writeInProgress */
attribute PRUint32 length
 True, when output stream has not yet been Close'ed
readonly attribute boolean writeInProgress

Methods

 Get a reference to the one and only output stream for this instance.
 The zero-based startPosition argument is used is used to set the initial
 write cursor position.  The startPosition cannot be set larger than the
 current buffer length.  Calling this method has the side-effect of
 truncating the internal buffer to startPosition bytes.
nsIOutputStream getOutputStream(in PRInt32 startPosition)

 Initialize the stream, setting up the amount of space that will be
 allocated for the stream's backing-store.

 @param segmentSize
        Size of each segment. Must be a power of two.
 @param maxSize
        Maximum total size of this stream. length will always be less
        than or equal to this value. Passing PR_UINT32_MAX is safe.
 @param segmentAllocator
        Which allocator to use for the segments. May be null, in which
        case a default allocator will be used.
void init(in PRUint32 segmentSize, in PRUint32 maxSize, in nsIMemory segmentAllocator)
 Create a new input stream to read data (written by the singleton output
 stream) from the internal buffer.  Multiple, independent input streams
 can be created.
nsIInputStream newInputStream(in PRInt32 startPosition)