Package org.apache.tika.io
Class TailStream
- java.lang.Object
-
- java.io.InputStream
-
- java.io.FilterInputStream
-
- org.apache.tika.io.TailStream
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable
public class TailStream extends java.io.FilterInputStreamA specialized input stream implementation which records the last portion read from an underlying stream.
This stream implementation is useful to deal with information which is known to be located at the end of a stream (e.g. ID3 v1 tags). While reading bytes from the underlying stream, a given number of bytes is kept in an internal buffer. This buffer can then be queried after the whole stream was read. It contains the last bytes read from the original input stream.
-
-
Constructor Summary
Constructors Constructor Description TailStream(java.io.InputStream in, int size)Creates a new instance ofTailStream.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description byte[]getTail()Returns an array with the last data read from the underlying stream.voidmark(int limit)This implementation saves the internal state including the content of the tail buffer so that it can be restored when ''reset()'' is called later.intread()This implementation adds the read byte to the internal tail buffer.intread(byte[] buf)This implementation delegates to the underlying stream and then adds the correct portion of the read buffer to the internal tail buffer.intread(byte[] buf, int ofs, int length)This implementation delegates to the underlying stream and then adds the correct portion of the read buffer to the internal tail buffer.voidreset()This implementation restores this stream's state to the state when ''mark()'' was called the last time.longskip(long n)This implementation delegates to theread()method to ensure that the tail buffer is also filled if data is skipped.
-
-
-
Method Detail
-
read
public int read() throws java.io.IOExceptionThis implementation adds the read byte to the internal tail buffer.- Overrides:
readin classjava.io.FilterInputStream- Throws:
java.io.IOException
-
read
public int read(byte[] buf) throws java.io.IOExceptionThis implementation delegates to the underlying stream and then adds the correct portion of the read buffer to the internal tail buffer.- Overrides:
readin classjava.io.FilterInputStream- Throws:
java.io.IOException
-
read
public int read(byte[] buf, int ofs, int length) throws java.io.IOExceptionThis implementation delegates to the underlying stream and then adds the correct portion of the read buffer to the internal tail buffer.- Overrides:
readin classjava.io.FilterInputStream- Throws:
java.io.IOException
-
skip
public long skip(long n) throws java.io.IOExceptionThis implementation delegates to theread()method to ensure that the tail buffer is also filled if data is skipped.- Overrides:
skipin classjava.io.FilterInputStream- Throws:
java.io.IOException
-
mark
public void mark(int limit)
This implementation saves the internal state including the content of the tail buffer so that it can be restored when ''reset()'' is called later.- Overrides:
markin classjava.io.FilterInputStream
-
reset
public void reset()
This implementation restores this stream's state to the state when ''mark()'' was called the last time. If ''mark()'' has not been called before, this method has no effect.- Overrides:
resetin classjava.io.FilterInputStream
-
getTail
public byte[] getTail()
Returns an array with the last data read from the underlying stream. If the underlying stream contained more data than the ''tailSize'' constructor argument, the returned array has a length of ''tailSize''. Otherwise, its length equals the number of bytes read.- Returns:
- an array with the last data read from the underlying stream
-
-