Home | History | Annotate | Download | only in compressors
      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 
     21 import java.io.InputStream;
     22 
     23 public abstract class CompressorInputStream extends InputStream {
     24     private long bytesRead = 0;
     25 
     26     /**
     27      * Increments the counter of already read bytes.
     28      * Doesn't increment if the EOF has been hit (read == -1)
     29      *
     30      * @param read the number of bytes read
     31      *
     32      * @since 1.1
     33      */
     34     protected void count(final int read) {
     35         count((long) read);
     36     }
     37 
     38     /**
     39      * Increments the counter of already read bytes.
     40      * 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 = bytesRead + read;
     47         }
     48     }
     49 
     50     /**
     51      * Decrements the counter of already read bytes.
     52      *
     53      * @param pushedBack the number of bytes pushed back.
     54      * @since 1.7
     55      */
     56     protected void pushedBackBytes(final long pushedBack) {
     57         bytesRead -= pushedBack;
     58     }
     59 
     60     /**
     61      * Returns the current number of bytes read from this stream.
     62      * @return the number of read bytes
     63      * @deprecated this method may yield wrong results for large
     64      * archives, use #getBytesRead instead
     65      */
     66     @Deprecated
     67     public int getCount() {
     68         return (int) bytesRead;
     69     }
     70 
     71     /**
     72      * Returns the current number of bytes read from this stream.
     73      * @return the number of read bytes
     74      *
     75      * @since 1.1
     76      */
     77     public long getBytesRead() {
     78         return bytesRead;
     79     }
     80 
     81     /**
     82      * Returns the amount of raw or compressed bytes read by the stream.
     83      *
     84      * <p>This implementation invokes {@link #getBytesRead}.</p>
     85      *
     86      * <p>Provides half of {@link
     87      * org.apache.commons.compress.utils.InputStreamStatistics}
     88      * without forcing subclasses to implement the other half.</p>
     89      *
     90      * @return the amount of decompressed bytes returned by the stream
     91      * @since 1.17
     92      */
     93     public long getUncompressedCount() {
     94         return getBytesRead();
     95     }
     96 }
     97