org.zkoss.io
Class RepeatableInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by org.zkoss.io.RepeatableInputStream
All Implemented Interfaces:
Closeable, Repeatable

public class RepeatableInputStream
extends InputStream
implements Repeatable

RepeatableInputStream adds functionality to another input stream, the ability to read repeatedly. By repeatable-read we mean, after close(), the next invocation of read() will re-open the input stream.

RepeatableInputStream actually creates a temporary space to buffer the content, so it can be re-opened again after closed. Notice that the temporary space (a.k.a., the buffered input stream) is never closed until garbage-collected.

If the content size of the given input stream is smaller than the value specified in the system property called "org.zkoss.io.memoryLimitSize", the content will be buffered in the memory. If the size exceeds, the content will be buffered in a temporary file. By default, it is 512KB. Note: the maximal value is Integer.MAX_VALUE

If the content size of the given input stream is larger than the value specified in the system property called "org.zkoss.io.bufferLimitSize", the content won't be buffered, and it means the read is not repeatable. By default, it is 20MB. Note: the maximal value is Integer.MAX_VALUE

Since:
3.0.4
Author:
jumperchen, tomyeh

Method Summary
 void close()
          Closes the current access, and the next call of close() re-opens the buffered input stream.
protected  void finalize()
           
static InputStream getInstance(File file)
          Returns an input stream of a file that can be read repeatedly.
static InputStream getInstance(InputStream is)
          Returns an input stream that can be read repeatedly, or null if the given input stream is null.
static InputStream getInstance(String filename)
          Returns an input stream of a file that can be read repeatedly.
static InputStream getInstance(URL url)
          Returns an input stream of the resource of the given URL that can be read repeatedly.
 int read()
           
 
Methods inherited from class java.io.InputStream
available, mark, markSupported, read, read, reset, skip
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

getInstance

public static InputStream getInstance(InputStream is)
Returns an input stream that can be read repeatedly, or null if the given input stream is null. Note: the returned input stream encapsulates the given input stream, rd (a.k.a., the buffered input stream) to adds the functionality to re-opens the input stream once close() is called.

By repeatable-read we mean, after close(), the next invocation of read() will re-open the input stream.

Use this method instead of instantiating RepeatableInputStream with the constructor.

See Also:
getInstance(File)

getInstance

public static InputStream getInstance(File file)
                               throws FileNotFoundException
Returns an input stream of a file that can be read repeatedly. Note: it assumes the file is binary (rather than text).

By repeatable-read we mean, after close(), the next invocation of read() will re-open the input stream.

Note: it is efficient since we don't have to buffer the content of the file to make it repeatable-read.

Throws:
IllegalArgumentException - if file is null.
FileNotFoundException - if file not found
See Also:
getInstance(InputStream), getInstance(String)

getInstance

public static InputStream getInstance(String filename)
                               throws FileNotFoundException
Returns an input stream of a file that can be read repeatedly. Note: it assumes the file is binary (rather than text).

By repeatable-read we mean, after close(), the next invocation of read() will re-open the input stream.

Note: it is efficient since we don't have to buffer the content of the file to make it repeatable-read.

Throws:
IllegalArgumentException - if file is null.
FileNotFoundException
See Also:
getInstance(InputStream), getInstance(File)

getInstance

public static InputStream getInstance(URL url)
Returns an input stream of the resource of the given URL that can be read repeatedly. Note: it assumes the resource is binary (rather than text).

By repeatable-read we mean, after close(), the next invocation of read() will re-open the input stream.

Note: it is efficient since we don't have to buffer the content of the resource to make it repeatable-read.

Throws:
IllegalArgumentException - if url is null.
See Also:
getInstance(InputStream), getInstance(String)

read

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

close

public void close()
           throws IOException
Closes the current access, and the next call of close() re-opens the buffered input stream.

Specified by:
close in interface Closeable
Overrides:
close in class InputStream
Throws:
IOException

finalize

protected void finalize()
                 throws Throwable
Overrides:
finalize in class Object
Throws:
Throwable


Copyright © 2013. All rights reserved.