CompressorInputStream.java

  1. /*
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  * http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing,
  13.  * software distributed under the License is distributed on an
  14.  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  15.  * KIND, either express or implied.  See the License for the
  16.  * specific language governing permissions and limitations
  17.  * under the License.
  18.  */
  19. package org.apache.commons.compress.compressors;

  20. import java.io.InputStream;

  21. public abstract class CompressorInputStream extends InputStream {

  22.     private long bytesRead;

  23.     /**
  24.      * Constructs a new instance.
  25.      */
  26.     public CompressorInputStream() {
  27.         // empty
  28.     }

  29.     /**
  30.      * Increments the counter of already read bytes. Doesn't increment if the EOF has been hit (read == -1)
  31.      *
  32.      * @param read the number of bytes read
  33.      *
  34.      * @since 1.1
  35.      */
  36.     protected void count(final int read) {
  37.         count((long) read);
  38.     }

  39.     /**
  40.      * Increments the counter of already read bytes. Doesn't increment if the EOF has been hit (read == -1)
  41.      *
  42.      * @param read the number of bytes read
  43.      */
  44.     protected void count(final long read) {
  45.         if (read != -1) {
  46.             bytesRead += read;
  47.         }
  48.     }

  49.     /**
  50.      * Gets the current number of bytes read from this stream.
  51.      *
  52.      * @return the number of read bytes
  53.      *
  54.      * @since 1.1
  55.      */
  56.     public long getBytesRead() {
  57.         return bytesRead;
  58.     }

  59.     /**
  60.      * Gets the current number of bytes read from this stream.
  61.      *
  62.      * @return the number of read bytes
  63.      * @deprecated this method may yield wrong results for large archives, use #getBytesRead instead
  64.      */
  65.     @Deprecated
  66.     public int getCount() {
  67.         return (int) bytesRead;
  68.     }

  69.     /**
  70.      * Gets the amount of raw or compressed bytes read by the stream.
  71.      *
  72.      * <p>
  73.      * This implementation invokes {@link #getBytesRead}.
  74.      * </p>
  75.      *
  76.      * <p>
  77.      * Provides half of {@link org.apache.commons.compress.utils.InputStreamStatistics} without forcing subclasses to implement the other half.
  78.      * </p>
  79.      *
  80.      * @return the amount of decompressed bytes returned by the stream
  81.      * @since 1.17
  82.      */
  83.     public long getUncompressedCount() {
  84.         return getBytesRead();
  85.     }

  86.     /**
  87.      * Decrements the counter of already read bytes.
  88.      *
  89.      * @param pushedBack the number of bytes pushed back.
  90.      * @since 1.7
  91.      */
  92.     protected void pushedBackBytes(final long pushedBack) {
  93.         bytesRead -= pushedBack;
  94.     }
  95. }