org.apache.xerces.impl
Class XMLEntityManager.RewindableInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by org.apache.xerces.impl.XMLEntityManager.RewindableInputStream
All Implemented Interfaces:
java.io.Closeable
Enclosing class:
XMLEntityManager

protected final class XMLEntityManager.RewindableInputStream
extends java.io.InputStream

This class wraps the byte inputstreams we're presented with. We need it because java.io.InputStreams don't provide functionality to reread processed bytes, and they have a habit of reading more than one character when you call their read() methods. This means that, once we discover the true (declared) encoding of a document, we can neither backtrack to read the whole doc again nor start reading where we are with a new reader. This class allows rewinding an inputStream by allowing a mark to be set, and the stream reset to that position. The class assumes that it needs to read one character per invocation when it's read() method is inovked, but uses the underlying InputStream's read(char[], offset length) method--it won't buffer data read this way!

Author:
Neil Graham, IBM, Glenn Marcy, IBM

INTERNAL:

Usage of this class is not supported. It may be altered or removed at any time.

Constructor Summary
XMLEntityManager.RewindableInputStream(java.io.InputStream is)
           
 
Method Summary
 int available()
           
 void close()
           
 void mark(int howMuch)
           
 boolean markSupported()
           
 int read()
           
 int read(byte[] b, int off, int len)
           
 int readAndBuffer()
           
 void reset()
           
 void rewind()
           
 void setStartOffset(int offset)
           
 long skip(long n)
           
 
Methods inherited from class java.io.InputStream
read
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XMLEntityManager.RewindableInputStream

public XMLEntityManager.RewindableInputStream(java.io.InputStream is)
Method Detail

setStartOffset

public void setStartOffset(int offset)

rewind

public void rewind()

readAndBuffer

public int readAndBuffer()
                  throws java.io.IOException
Throws:
java.io.IOException

read

public int read()
         throws java.io.IOException
Specified by:
read in class java.io.InputStream
Throws:
java.io.IOException

read

public int read(byte[] b,
                int off,
                int len)
         throws java.io.IOException
Overrides:
read in class java.io.InputStream
Throws:
java.io.IOException

skip

public long skip(long n)
          throws java.io.IOException
Overrides:
skip in class java.io.InputStream
Throws:
java.io.IOException

available

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

mark

public void mark(int howMuch)
Overrides:
mark in class java.io.InputStream

reset

public void reset()
Overrides:
reset in class java.io.InputStream

markSupported

public boolean markSupported()
Overrides:
markSupported in class java.io.InputStream

close

public void close()
           throws java.io.IOException
Specified by:
close in interface java.io.Closeable
Overrides:
close in class java.io.InputStream
Throws:
java.io.IOException


Copyright 1999-2010 The Apache Software Foundation. All Rights Reserved.