schmitzm.io
Class LimitedInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by schmitzm.io.LimitedInputStream
All Implemented Interfaces:
Closeable

public class LimitedInputStream
extends InputStream


Diese Klasse wurde urspruenglich 2002/2003 von Martin Schmitz fuer die ADAGIOS-Java-Library (Universitaet Bonn) erstellt, 2009 in das SCHMITZM-Projekt uebernommen und teilweise erweitert.
Diese Klasse repraesentiert einen Eingabe-Stream, der einen anderen Eingabe-Stream kapselt und auf eine bestimmte Groesse begrenzt. Somit ist es moeglich, einer Methode "vorzugaukeln" der ihr uebergebene InputStream habe eine bestimmte Laenge, obwohl er in Wirklichkeit viel groesser ist.
Der Leser fragt sich nach dem Sinn? :-)
Beispiel:
In einem InputStream A stehen nacheinander die Binaer-Repraesentationen geometrischer Objekte. Die ersten N Bytes gehoeren zum ersten Objekt.
Uebergibt man nun den gesamten Stream an die initFromBinary-Methode, wuerde diese u.U. nicht nur die ersten N Bytes lesen, sondern versuchen, den kompletten Stream als Objekt zu interpretieren!!
Uebergibt man der initFromBinary-Methode jedoch einen LimitedInputStream der auf dem Stream A basiert und auf N Bytes begrenzt ist, sind die restlichen Bytes von A (die hinter dem N-ten Byte stehen) fuer die initFromBinary-Methode transparent.

Version:
1.0
Author:
Martin Schmitz (University of Bonn/Germany)

Constructor Summary
LimitedInputStream(InputStream input, int limit)
          Erzeugt einen neuen LimitedInputStream.
 
Method Summary
 int available()
          Liefert die Anzahl an Bytes, die noch aus dem LimitedInputStream gelesen werden koennen.
 int getLimit()
          Liefert das Limit fuer den Stream.
 int read()
          Liefert ein Byte des Basis-Streams, solange das Limit (oder das Ende des Basis-Stream) noch nicht erreicht ist.
 void setLimit(int limit)
          Setzt das Limit fuer den Stream.
 
Methods inherited from class java.io.InputStream
close, mark, markSupported, read, read, reset, skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LimitedInputStream

public LimitedInputStream(InputStream input,
                          int limit)
Erzeugt einen neuen LimitedInputStream.

Parameters:
input - Basis-Daten
limit - Maximale Anzahl an Bytes, die aus dem Basis-Stream gelesen werden, bevor der LimitedInputStream sein Ende erreicht
Method Detail

getLimit

public int getLimit()
Liefert das Limit fuer den Stream.


setLimit

public void setLimit(int limit)
Setzt das Limit fuer den Stream.

Parameters:
limit - neues Limit (in Bytes)
Throws:
IllegalArgumentException - falls limit < 0

available

public int available()
              throws IOException
Liefert die Anzahl an Bytes, die noch aus dem LimitedInputStream gelesen werden koennen.

Overrides:
available in class InputStream
Throws:
IOException - falls der available()-Aufruf fuer den Basis-Stream scheitert

read

public int read()
         throws IOException
Liefert ein Byte des Basis-Streams, solange das Limit (oder das Ende des Basis-Stream) noch nicht erreicht ist.

Specified by:
read in class InputStream
Throws:
IOException - falls der read()-Aufruf fuer den Basis-Stream scheitert