schmitzm.io
Class TokenInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.FilterInputStream
          extended by java.io.PushbackInputStream
              extended by schmitzm.io.TokenInputStream
All Implemented Interfaces:
Closeable

public class TokenInputStream
extends PushbackInputStream


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 erweitert einen DataInputStream um die Eigenschaft des StreamTokenizer

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

Nested Class Summary
static class TokenInputStream.DefaultTokenDefinition
          Diese Klasse stellt eine Standard-Definition fuer einen TokenInputStream dar.
static interface TokenInputStream.TokenDefinition
          Diese Klasse bestimmt, wie die Zeichen in einem TokenInputStream zu Token zusammengefasst werde.
 
Field Summary
static TokenInputStream.TokenDefinition DEFAULT_TOKENDEF
          Instanz von DefaultTokenDefinition.
 double nval
          Handelt es sich bei dem letzten Token um einen numerischen Wert, wird dieser in nval gespeichtert.
 String sval
          Handelt es sich bei dem letzten Token um eine Zeichenkette, wird diese in sval gespeichtert.
static int TT_EOF
          Signalisiert, dass kein Token mehr gelesen werden konnte, da das Ende des Basisstreams erreicht wurde.
static int TT_NUMBER
          Signalisiert, dass das gelesene Token numerisch ist und in nval gespeichert ist.
static int TT_WORD
          Signalisiert, dass das gelesene Token alphanumerisch ist und in sval gespeichert ist.
 int ttype
          Enthaelt den Typ des letzten gelesenene Tokens.
 
Fields inherited from class java.io.PushbackInputStream
buf, pos
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
TokenInputStream(InputStream is)
          Erzeugt einen neuen TokenInputStream.
TokenInputStream(InputStream is, int size)
          Erzeugt einen neuen TokenInputStream.
TokenInputStream(InputStream is, int size, TokenInputStream.TokenDefinition def)
          Erzeugt einen neuen TokenInputStream.
 
Method Summary
static TokenInputStream fromInputStream(InputStream is)
          Liefert einen neuen TokenInputStream.
 TokenInputStream.TokenDefinition getTokenDefinition()
          Liefert die zugrunde liegende Token-Definition.
 boolean pushBack()
          Legt das letzte Token zurueck auf den Stream.
 int readToken()
          Liesst ein Token vom Stream.
 
Methods inherited from class java.io.PushbackInputStream
available, close, mark, markSupported, read, read, reset, skip, unread, unread, unread
 
Methods inherited from class java.io.FilterInputStream
read
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_TOKENDEF

public static final TokenInputStream.TokenDefinition DEFAULT_TOKENDEF
Instanz von DefaultTokenDefinition.

See Also:
adagios.types.TokenInputStream.DefaultTokenDefinition

TT_EOF

public static final int TT_EOF
Signalisiert, dass kein Token mehr gelesen werden konnte, da das Ende des Basisstreams erreicht wurde.

See Also:
StreamTokenizer.TT_EOF, Constant Field Values

TT_NUMBER

public static final int TT_NUMBER
Signalisiert, dass das gelesene Token numerisch ist und in nval gespeichert ist.

See Also:
StreamTokenizer.TT_NUMBER, Constant Field Values

TT_WORD

public static final int TT_WORD
Signalisiert, dass das gelesene Token alphanumerisch ist und in sval gespeichert ist.

See Also:
StreamTokenizer.TT_WORD, Constant Field Values

ttype

public int ttype
Enthaelt den Typ des letzten gelesenene Tokens.

See Also:
TT_EOF, TT_NUMBER, TT_WORD, StreamTokenizer.ttype

sval

public String sval
Handelt es sich bei dem letzten Token um eine Zeichenkette, wird diese in sval gespeichtert. Ansonsten ist sval = null.

See Also:
StreamTokenizer.sval

nval

public double nval
Handelt es sich bei dem letzten Token um einen numerischen Wert, wird dieser in nval gespeichtert. Ansonsten ist nval = 0.0.

See Also:
StreamTokenizer.nval
Constructor Detail

TokenInputStream

public TokenInputStream(InputStream is)
Erzeugt einen neuen TokenInputStream. Der Pushback-Buffer wird mit 64Byte initialisiert. Als Tokendefinition wird DefaultTokenDefinition verwendet.

Parameters:
is - BasisInputStream
See Also:
DEFAULT_TOKENDEF

TokenInputStream

public TokenInputStream(InputStream is,
                        int size)
Erzeugt einen neuen TokenInputStream. Als Tokendefinition wird DefaultTokenDefinition verwendet.

Parameters:
is - BasisInputStream
size - Groesse des Pushback-Buffers
Throws:
IllegalArgumentException - falls size <= 0
See Also:
DEFAULT_TOKENDEF

TokenInputStream

public TokenInputStream(InputStream is,
                        int size,
                        TokenInputStream.TokenDefinition def)
Erzeugt einen neuen TokenInputStream.

Parameters:
is - BasisInputStream
size - Groesse des Pushback-Buffers
def - bestimmt wie die Token aufgebaut sind
Throws:
IllegalArgumentException - falls size <= 0
See Also:
adagios.types.TokenInputStream.TokenDefinition, DEFAULT_TOKENDEF
Method Detail

fromInputStream

public static TokenInputStream fromInputStream(InputStream is)
Liefert einen neuen TokenInputStream. Handelt es sich bei dem uebergebenen Basis-Stream bereits um einen TokenInputStream wird dieser (gecastet) zurueckgeliefert, ansonsten wird eine neue Instanz erzeugt.

Parameters:
is - Basis-Stream

getTokenDefinition

public TokenInputStream.TokenDefinition getTokenDefinition()
Liefert die zugrunde liegende Token-Definition.


readToken

public int readToken()
              throws IOException
Liesst ein Token vom Stream. Dabei werden zunaecht alle Delimiter-Zeichen aus dem Stream gelesen und ignoriert. Das erste Nicht-Delimiter-Zeichen bestimmt, ob das Token numerisch ist, oder nicht. Bei numerischen Tokens wird das "Token-Lesen" beim ersten nicht-numerischen Zeichen abgebrochen. Bei nicht-numerische Tokens erst beim naechsten Delimiter.
Der Wert des Tokens wird der Variablen sval oder nval hinterlegt.
Ein (nicht-numerisches) Ein-Zeichen-Token wird direkt als int im Attribut ttype gespeichert und nicht in sval (vgl. StreamTokenizer).
Beispiel (Delimiter = " \n\t"):
" abcd456bla 999.99k k88 9,88 " liefert die Token

Returns:
Typ des Tokens (Inhalt von ttype)
Throws:
IOException
See Also:
ttype, sval, nval, StreamTokenizer.ttype, StreamTokenizer.nextToken()

pushBack

public boolean pushBack()
                 throws IOException
Legt das letzte Token zurueck auf den Stream. Wiederholte Aufrufe legen das letzte Token mehrmals zurueck auf den Stream!! Die Methode wird ignoriert, falls den letze Aufruf von nextToken(..) das Streamende ueberschritten hat.

Returns:
false, falls das letzte Token nicht auf den Stream zurueckgelegt werden konnte
Throws:
IOException - falls das Zuruecklegen der Bytes auf den BasisStream scheitert