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. Doesn't increment if the EOF has been hit (read == -1) 028 * 029 * @param read the number of bytes read 030 * 031 * @since 1.1 032 */ 033 protected void count(final int read) { 034 count((long) read); 035 } 036 037 /** 038 * Increments the counter of already read bytes. Doesn't increment if the EOF has been hit (read == -1) 039 * 040 * @param read the number of bytes read 041 */ 042 protected void count(final long read) { 043 if (read != -1) { 044 bytesRead += read; 045 } 046 } 047 048 /** 049 * Returns the current number of bytes read from this stream. 050 * 051 * @return the number of read bytes 052 * 053 * @since 1.1 054 */ 055 public long getBytesRead() { 056 return bytesRead; 057 } 058 059 /** 060 * Returns the current number of bytes read from this stream. 061 * 062 * @return the number of read bytes 063 * @deprecated this method may yield wrong results for large archives, use #getBytesRead instead 064 */ 065 @Deprecated 066 public int getCount() { 067 return (int) bytesRead; 068 } 069 070 /** 071 * Returns the amount of raw or compressed bytes read by the stream. 072 * 073 * <p> 074 * This implementation invokes {@link #getBytesRead}. 075 * </p> 076 * 077 * <p> 078 * Provides half of {@link org.apache.commons.compress.utils.InputStreamStatistics} without forcing subclasses to implement the other half. 079 * </p> 080 * 081 * @return the amount of decompressed bytes returned by the stream 082 * @since 1.17 083 */ 084 public long getUncompressedCount() { 085 return getBytesRead(); 086 } 087 088 /** 089 * Decrements the counter of already read bytes. 090 * 091 * @param pushedBack the number of bytes pushed back. 092 * @since 1.7 093 */ 094 protected void pushedBackBytes(final long pushedBack) { 095 bytesRead -= pushedBack; 096 } 097}