{
InputStream input = null;
try
{
input = new BufferedInputStream(
new RandomAccessFileInputStream( buffer, position, length ), BUFFER_SIZE );
IOUtils.closeQuietly(unFilteredStream);
unFilteredStream = new RandomAccessFileOutputStream( buffer );
decodeResult = filter.decode( input, unFilteredStream, this, filterIndex );
done = true;
}
catch( IOException io )
{
length--;
exception = io;
}
finally
{
IOUtils.closeQuietly(input);
}
}
if( !done )
{
//if no good stream was found then lets try again but with the
//length of data that was actually read and not length
//defined in the dictionary
length = writtenLength;
for( int tryCount=0; !done && tryCount<5; tryCount++ )
{
InputStream input = null;
try
{
input = new BufferedInputStream(
new RandomAccessFileInputStream( buffer, position, length ), BUFFER_SIZE );
IOUtils.closeQuietly(unFilteredStream);
unFilteredStream = new RandomAccessFileOutputStream( buffer );
decodeResult = filter.decode( input, unFilteredStream, this, filterIndex);
done = true;
}