org.freehep.util.io
Class ByteCountOutputStream

java.lang.Object
  extended by java.io.OutputStream
      extended by java.io.FilterOutputStream
          extended by org.freehep.util.io.CompressableOutputStream
              extended by org.freehep.util.io.BitOutputStream
                  extended by org.freehep.util.io.ByteOrderOutputStream
                      extended by org.freehep.util.io.ByteCountOutputStream
All Implemented Interfaces:
Closeable, DataOutput, Flushable, FinishableOutputStream
Direct Known Subclasses:
TaggedOutputStream

public class ByteCountOutputStream
extends ByteOrderOutputStream

Allows to write to some internal buffer and keep count of any set of stacked buffers written. When a pushBuffer is called, a new buffer is created. When a popBuffer is called, the number of bytes written to the popped buffer is returned. From this moment on one is writing again to the underlying buffer/outputstream. A header can be written and the header can be written. By calling append(), the previous buffer will be appended to the underlying one. This way one can write into a buffer, retrieve its length, create some header bytes and insert those in front of the just written buffer.

Version:
$Id: ByteCountOutputStream.java 8584 2006-08-10 23:06:37Z duns $
Author:
Mark Donszelmann, Ian Graham - added popBufferBytes() for use by CGMOutputStream

Field Summary
 
Fields inherited from class org.freehep.util.io.ByteOrderOutputStream
little, written
 
Fields inherited from class java.io.FilterOutputStream
out
 
Constructor Summary
ByteCountOutputStream(OutputStream out, boolean littleEndian)
          Create a Byte Count output stream from given stream
 
Method Summary
 void append()
          Inserts the bytes written as header and puts the write pointer at the end of the stream.
 void close()
          closes the stream, inserting any non-written header.
 int getBufferLength()
           
 int getLength()
           
 int popBuffer()
          returns the number of bytes written since the last pushBuffer call.
 byte[] popBufferBytes()
          Similar to pop buffer, but returns the actual byte[] buffer and then removes it from the bufferList so that subsequent appends will have no action.
 void pushBuffer()
          Pushes the buffer and strat writing to a new one.
 void write(int b)
           
 
Methods inherited from class org.freehep.util.io.ByteOrderOutputStream
size, writeAsciiZString, writeBoolean, writeByte, writeByte, writeBytes, writeChar, writeChars, writeDouble, writeFloat, writeInt, writeInt, writeLong, writeShort, writeShort, writeString, writeUnsignedByte, writeUnsignedByte, writeUnsignedInt, writeUnsignedInt, writeUnsignedShort, writeUnsignedShort, writeUTF, writeUTF
 
Methods inherited from class org.freehep.util.io.BitOutputStream
byteAlign, finish, flushByte, minBits, minBits, minBits, writeBitFlag, writeFBits, writeSBits, writeUBits
 
Methods inherited from class org.freehep.util.io.CompressableOutputStream
startCompressing, write
 
Methods inherited from class java.io.FilterOutputStream
flush, write
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface java.io.DataOutput
write, write
 

Constructor Detail

ByteCountOutputStream

public ByteCountOutputStream(OutputStream out,
                             boolean littleEndian)
Create a Byte Count output stream from given stream

Parameters:
out - stream to write to
littleEndian - true if stream should be little endian
Method Detail

write

public void write(int b)
           throws IOException
Specified by:
write in interface DataOutput
Overrides:
write in class ByteOrderOutputStream
Throws:
IOException

pushBuffer

public void pushBuffer()
                throws IOException
Pushes the buffer and strat writing to a new one.

Throws:
IOException - if the write fails

popBuffer

public int popBuffer()
              throws IOException
returns the number of bytes written since the last pushBuffer call. It also puts the write pointer at the start of the buffer, to be able to "insert" a header. If no buffer was ever pushed, or the last one has been popped -1 is returned.

Returns:
number of bytes written or -1
Throws:
IOException - if the write fails

popBufferBytes

public byte[] popBufferBytes()
                      throws IOException
Similar to pop buffer, but returns the actual byte[] buffer and then removes it from the bufferList so that subsequent appends will have no action. When using this method, the caller is responsible for writing all buffered data as desired. The byte[] array will usually be larger than the actual content, so to determine the length of the actual data, you must call getBufferLength() before invoking this method.

Returns:
byte array of bytes that need to be written
Throws:
IOException - if write fails

getBufferLength

public int getBufferLength()
Returns:
valid number of bytes in the buffer

getLength

public int getLength()
Returns:
total number of bytes written

append

public void append()
            throws IOException
Inserts the bytes written as header and puts the write pointer at the end of the stream.

Throws:
IOException - if write fails

close

public void close()
           throws IOException
closes the stream, inserting any non-written header.

Specified by:
close in interface Closeable
Overrides:
close in class BitOutputStream
Throws:
IOException


Copyright © 2000-2007 FreeHEP. All Rights Reserved.