commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stefan Bodewig (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (COMPRESS-255) BZip2CompressorInputStream does not implement public int available() throws IOException
Date Fri, 17 Jan 2014 05:00:32 GMT

    [ 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)

Mime
View raw message