View Javadoc
1   /*
2    *  Licensed to the Apache Software Foundation (ASF) under one or more
3    *  contributor license agreements.  See the NOTICE file distributed with
4    *  this work for additional information regarding copyright ownership.
5    *  The ASF licenses this file to You under the Apache License, Version 2.0
6    *  (the "License"); you may not use this file except in compliance with
7    *  the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  
18  package org.apache.commons.compress.archivers.zip;
19  
20  import java.io.IOException;
21  import java.io.InputStream;
22  import java.util.zip.Inflater;
23  import java.util.zip.InflaterInputStream;
24  
25  import org.apache.commons.compress.utils.InputStreamStatistics;
26  
27  /**
28   * Helper class to provide statistics
29   *
30   * @since 1.17
31   */
32  class InflaterInputStreamWithStatistics extends InflaterInputStream implements InputStreamStatistics {
33  
34      private long compressedCount;
35      private long uncompressedCount;
36  
37      InflaterInputStreamWithStatistics(final InputStream in) {
38          super(in);
39      }
40  
41      InflaterInputStreamWithStatistics(final InputStream in, final Inflater inf) {
42          super(in, inf);
43      }
44  
45      InflaterInputStreamWithStatistics(final InputStream in, final Inflater inf, final int size) {
46          super(in, inf, size);
47      }
48  
49      @Override
50      protected void fill() throws IOException {
51          super.fill();
52          compressedCount += inf.getRemaining();
53      }
54  
55      @Override
56      public long getCompressedCount() {
57          return compressedCount;
58      }
59  
60      @Override
61      public long getUncompressedCount() {
62          return uncompressedCount;
63      }
64  
65      @Override
66      public int read() throws IOException {
67          final int b = super.read();
68          if (b > -1) {
69              uncompressedCount++;
70          }
71          return b;
72      }
73  
74      @Override
75      public int read(final byte[] b, final int off, final int len) throws IOException {
76          final int bytes = super.read(b, off, len);
77          if (bytes > -1) {
78              uncompressedCount += bytes;
79          }
80          return bytes;
81      }
82  }