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