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)