org.apache.lucene.util
Class UnsafeByteArrayInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by org.apache.lucene.util.UnsafeByteArrayInputStream
All Implemented Interfaces:
Closeable

public class UnsafeByteArrayInputStream
extends InputStream

This class, much like ByteArrayInputStream uses a given buffer as a source of an InputStream. Unlike ByteArrayInputStream, this class does not "waste" memory by creating a local copy of the given buffer, but rather uses the given buffer as is. Hence the name Unsafe. While using this class one should remember that the byte[] buffer memory is shared and might be changed from outside. For reuse-ability, a call for reInit(byte[]) can be called, and initialize the stream with a new buffer.

WARNING: This API is experimental and might change in incompatible ways in the next release.

Constructor Summary
UnsafeByteArrayInputStream()
          Creates a new instance by not using any byte[] up front.
UnsafeByteArrayInputStream(byte[] buffer)
          Creates an UnsafeByteArrayInputStream which uses a given byte array as the source of the stream.
UnsafeByteArrayInputStream(byte[] buffer, int startPos, int endPos)
          Creates an UnsafeByteArrayInputStream which uses a given byte array as the source of the stream, at the specific range: [startPos, endPos)
 
Method Summary
 int available()
           
 void mark(int readlimit)
           
 boolean markSupported()
           
 int read()
          Read a byte.
 void reInit(byte[] buffer)
          Initialize the stream with a given buffer, using the default limits of [0, buffer.length)
 void reInit(byte[] buffer, int startPos, int endPos)
          Initialize the stream with a given byte array as the source of the stream, at the specific range: [startPos, endPos)
 void reset()
          Resets the stream back to its original state.
 
Methods inherited from class java.io.InputStream
close, read, read, skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

UnsafeByteArrayInputStream

public UnsafeByteArrayInputStream()
Creates a new instance by not using any byte[] up front. If you use this constructor, you MUST call either of the reInit methods before you consume any byte from this instance.
This constructor is for convenience purposes only, so that if one does not have the byte[] at the moment of creation, one is not forced to pass a new byte[0] or something. Obviously in that case, one will call either reInit methods before using the class.


UnsafeByteArrayInputStream

public UnsafeByteArrayInputStream(byte[] buffer)
Creates an UnsafeByteArrayInputStream which uses a given byte array as the source of the stream. Default range is [0 , buffer.length)

Parameters:
buffer - byte array used as the source of this stream

UnsafeByteArrayInputStream

public UnsafeByteArrayInputStream(byte[] buffer,
                                  int startPos,
                                  int endPos)
Creates an UnsafeByteArrayInputStream which uses a given byte array as the source of the stream, at the specific range: [startPos, endPos)

Parameters:
buffer - byte array used as the source of this stream
startPos - first index (inclusive) to the data lying in the given buffer
endPos - an index (exclusive) where the data ends. data @ buffer[endPos] will never be read
Method Detail

mark

public void mark(int readlimit)
Overrides:
mark in class InputStream

markSupported

public boolean markSupported()
Overrides:
markSupported in class InputStream

reInit

public void reInit(byte[] buffer)
Initialize the stream with a given buffer, using the default limits of [0, buffer.length)

Parameters:
buffer - byte array used as the source of this stream

reInit

public void reInit(byte[] buffer,
                   int startPos,
                   int endPos)
Initialize the stream with a given byte array as the source of the stream, at the specific range: [startPos, endPos)

Parameters:
buffer - byte array used as the source of this stream
startPos - first index (inclusive) to the data lying in the given buffer
endPos - an index (exclusive) where the data ends. data @ buffer[endPos] will never be read

available

public int available()
              throws IOException
Overrides:
available in class InputStream
Throws:
IOException

read

public int read()
         throws IOException
Read a byte. Data returned as an integer [0,255] If end of stream reached, returns -1

Specified by:
read in class InputStream
Throws:
IOException

reset

public void reset()
           throws IOException
Resets the stream back to its original state. Basically - moving the index back to start position.

Overrides:
reset in class InputStream
Throws:
IOException