com.levigo.jadice.document.io
Class CarbonCopyStream

java.lang.Object
  extended by java.io.InputStream
      extended by com.levigo.jadice.document.io.SeekableInputStream
          extended by com.levigo.jadice.document.io.CarbonCopyStream
All Implemented Interfaces:
Closeable, DataInput, ImageInputStream

public class CarbonCopyStream
extends SeekableInputStream

A SeekableInputStream delegating all read operations to the stream given at construction time. In addition to this wholly transparent operation, all read operations performed using this stream are copied into a separate ByteArrayBuffer. This copying does not at all consider seeking, i.e. reading the same source stream segment twice using seeks will yield a buffer holding two copies of this segment.


Field Summary
 
Fields inherited from class com.levigo.jadice.document.io.SeekableInputStream
bitOffset, byteOrder, flushedPos
 
Constructor Summary
CarbonCopyStream(SeekableInputStream source)
          Create a CarbonCopyStream that proxies the a part of the source stream starting at current stream position of the source stream.
CarbonCopyStream(SeekableInputStream source, long start)
          Create a CarbonCopyStream that proxies the a part of the source stream starting at the given start position.
 
Method Summary
 ByteArrayBuffer getBuffer()
          Return the ByteArrayBuffer holding a copy of the data read via this stream.
 long getSizeEstimate()
          A rough estimated size for this stream instance, which is used for internal cache management.
 long getStreamPosition()
           
 long length()
          Returns the length of this stream contents, if available.
 int read()
          Reads a single byte from the stream and returns it as an int between 0 and 255.
 int read(byte[] b, int off, int len)
          Reads up to len bytes from the stream, and stores them into b starting at index off.
 void seek(long pos)
          Sets the current stream position, measured from the beginning of this data stream, at which the next read occurs.
 
Methods inherited from class com.levigo.jadice.document.io.SeekableInputStream
checkClosed, close, finalize, flush, flushBefore, getBitOffset, getByteOrder, getFlushedPosition, isCached, isCachedFile, isCachedMemory, mark, mark, read, readBit, readBits, readBoolean, readByte, readBytes, readChar, readDouble, readFloat, readFully, readFully, readFully, readFully, readFully, readFully, readFully, readFully, readInt, readInt, readLine, readLong, readShort, readUnsignedByte, readUnsignedInt, readUnsignedInt, readUnsignedShort, readUTF, reset, resetToInitialState, setBitOffset, setByteOrder, skip, skipBytes, skipBytes
 
Methods inherited from class java.io.InputStream
available, markSupported
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CarbonCopyStream

public CarbonCopyStream(SeekableInputStream source)
                 throws IOException
Create a CarbonCopyStream that proxies the a part of the source stream starting at current stream position of the source stream.

Parameters:
source -
Throws:
IOException

CarbonCopyStream

public CarbonCopyStream(SeekableInputStream source,
                        long start)
                 throws IOException
Create a CarbonCopyStream that proxies the a part of the source stream starting at the given start position. Calls to seek(long) and getStreamPosition() will take this start offset in consideration, i.e. seeking the CarbonCopyStream to offset 0 (zero) will seek the source stream to the given start position.

Parameters:
source -
start -
Throws:
IOException
Method Detail

getStreamPosition

public long getStreamPosition()
                       throws IOException
Throws:
IOException

seek

public void seek(long pos)
          throws IOException
Description copied from class: SeekableInputStream
Sets the current stream position, measured from the beginning of this data stream, at which the next read occurs. The offset may be set beyond the end of this data stream. Setting the offset beyond the end does not change the data length, an EOFException will be thrown only if a read is performed. The bit offset is set to 0.

An IndexOutOfBoundsException will be thrown if pos is smaller than the flushed position (as returned by getflushedPosition).

It is legal to seek past the end of the file; an EOFException will be thrown only if a read is performed.

Specified by:
seek in interface ImageInputStream
Specified by:
seek in class SeekableInputStream
Parameters:
pos - a long containing the desired file pointer position.
Throws:
IOException - if any other I/O error occurs.

length

public long length()
            throws IOException
Description copied from class: SeekableInputStream
Returns the length of this stream contents, if available. Otherwise -1L will be returned.

Specified by:
length in interface ImageInputStream
Specified by:
length in class SeekableInputStream
Returns:
the length, measured in bytes or -1L if unknown.
Throws:
IOException - if an I/O error occurs.

read

public int read()
         throws IOException
Description copied from class: SeekableInputStream
Reads a single byte from the stream and returns it as an int between 0 and 255. If EOF is reached, -1 is returned.

Subclasses must provide an implementation for this method. The subclass implementation should update the stream position before exiting.

The bit offset within the stream must be reset to zero before the read occurs.

Specified by:
read in interface ImageInputStream
Specified by:
read in class SeekableInputStream
Returns:
the value of the next byte in the stream, or -1 if EOF is reached.
Throws:
IOException - if the stream has been closed.

read

public int read(byte[] b,
                int off,
                int len)
         throws IOException
Description copied from class: SeekableInputStream
Reads up to len bytes from the stream, and stores them into b starting at index off. If no bytes can be read because the end of the stream has been reached, -1 is returned.

The bit offset within the stream must be reset to zero before the read occurs.

Subclasses must provide an implementation for this method. The subclass implementation should update the stream position before exiting.

Specified by:
read in interface ImageInputStream
Specified by:
read in class SeekableInputStream
Parameters:
b - an array of bytes to be written to.
off - the starting position within b to write to.
len - the maximum number of bytes to read.
Returns:
the number of bytes actually read, or -1 to indicate EOF.
Throws:
IOException - if an I/O error occurs.

getSizeEstimate

public long getSizeEstimate()
Description copied from class: SeekableInputStream
A rough estimated size for this stream instance, which is used for internal cache management.

Specified by:
getSizeEstimate in class SeekableInputStream
Returns:
an estimated size

getBuffer

public ByteArrayBuffer getBuffer()
Return the ByteArrayBuffer holding a copy of the data read via this stream.

Returns:
a ByteArrayBuffer


Copyright © 1995-2020 levigo holding gmbh. All Rights Reserved.