    001/*
    002 * Licensed to the Apache Software Foundation (ASF) under one
    003 * or more contributor license agreements.  See the NOTICE file
    004 * distributed with this work for additional information
    005 * regarding copyright ownership.  The ASF licenses this file
    006 * to you under the Apache License, Version 2.0 (the
    007 * "License"); you may not use this file except in compliance
    008 * with the License.  You may obtain a copy of the License at
    009 *
    010 * http://www.apache.org/licenses/LICENSE-2.0
    011 *
    012 * Unless required by applicable law or agreed to in writing,
    013 * software distributed under the License is distributed on an
    014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    015 * KIND, either express or implied.  See the License for the
    016 * specific language governing permissions and limitations
    017 * under the License.
    018 */
    019package org.apache.commons.compress.compressors;
    020
    021import java.io.InputStream;
    022
    023public abstract class CompressorInputStream extends InputStream {
    024    private long bytesRead;
    025
    026    /**
    027     * Increments the counter of already read bytes.
    028     * Doesn't increment if the EOF has been hit (read == -1)
    029     *
    030     * @param read the number of bytes read
    031     *
    032     * @since 1.1
    033     */
    034    protected void count(final int read) {
    035        count((long) read);
    036    }
    037
    038    /**
    039     * Increments the counter of already read bytes.
    040     * Doesn't increment if the EOF has been hit (read == -1)
    041     *
    042     * @param read the number of bytes read
    043     */
    044    protected void count(final long read) {
    045        if (read != -1) {
    046            bytesRead = bytesRead + read;
    047        }
    048    }
    049
    050    /**
    051     * Decrements the counter of already read bytes.
    052     *
    053     * @param pushedBack the number of bytes pushed back.
    054     * @since 1.7
    055     */
    056    protected void pushedBackBytes(final long pushedBack) {
    057        bytesRead -= pushedBack;
    058    }
    059
    060    /**
    061     * Returns the current number of bytes read from this stream.
    062     * @return the number of read bytes
    063     * @deprecated this method may yield wrong results for large
    064     * archives, use #getBytesRead instead
    065     */
    066    @Deprecated
    067    public int getCount() {
    068        return (int) bytesRead;
    069    }
    070
    071    /**
    072     * Returns the current number of bytes read from this stream.
    073     * @return the number of read bytes
    074     *
    075     * @since 1.1
    076     */
    077    public long getBytesRead() {
    078        return bytesRead;
    079    }
    080
    081    /**
    082     * Returns the amount of raw or compressed bytes read by the stream.
    083     *
    084     * <p>This implementation invokes {@link #getBytesRead}.</p>
    085     *
    086     * <p>Provides half of {@link
    087     * org.apache.commons.compress.utils.InputStreamStatistics}
    088     * without forcing subclasses to implement the other half.</p>
    089     *
    090     * @return the amount of decompressed bytes returned by the stream
    091     * @since 1.17
    092     */
    093    public long getUncompressedCount() {
    094        return getBytesRead();
    095    }
    096}