You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Stefan Bodewig (JIRA)" <ji...@apache.org> on 2014/01/17 06:00:32 UTC

[jira] [Commented] (COMPRESS-255) BZip2CompressorInputStream does not implement public int available() throws IOException

    [ https://issues.apache.org/jira/browse/COMPRESS-255?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13874435#comment-13874435 ] 

Stefan Bodewig commented on COMPRESS-255:
-----------------------------------------

Unfortunately it is not that simple.

BZip2 is block based with block sizes of 900kB by default.  You can't read a single byte from it unless a full block has been read from the underlying stream - and once it has been read you can read a lot of bytes from the uncompressed block even when the underlying stream's available returns 0.

A correct implementation must take into account how many bytes are remaining inside the uncompressed block and must return 0 as long as the current block hasn't been filled.  And once it has been filled it can give a better estimation of how much can be requested without blocking.

> BZip2CompressorInputStream does not implement public int available() throws IOException
> ---------------------------------------------------------------------------------------
>
>                 Key: COMPRESS-255
>                 URL: https://issues.apache.org/jira/browse/COMPRESS-255
>             Project: Commons Compress
>          Issue Type: Bug
>          Components: Compressors
>    Affects Versions: 1.6
>         Environment: Java
>            Reporter: Kevin Dauch
>              Labels: patch
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> Here is the patch that I created:
> --- src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java	(revision 1550240)
> +++ src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.java	(working copy)
> @@ -147,6 +147,16 @@
>          }
>      }
>  
> +    @Override
> +    public int available() throws IOException {
> +	int avail = 0;
> +	if (this.in != null) {
> +	    avail = this.in.available();
> +	}
> +        return avail;
> +    }
> +
> +
>      /*
>       * (non-Javadoc)
>       * 



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)