Вы можете посчитать количество прочитанных байтов, используя пользовательский InputStream. Вам нужно будет заставить поток читать по одному байту за раз, чтобы гарантировать, что вы не читаете больше, чем нужно.
Вы можете обернуть ваш текущий InputStream в это
class CountingInputStream extends InputStream {
final InputStream is;
int counter = 0;
public CountingInputStream(InputStream is) {
this.is = is;
}
public int read() throws IOException {
int read = is.read();
if (read >= 0) counter++;
return read;
}
}
и затем оберните его в GZIPInputStream. Счетчик поля будет содержать количество прочитанных байтов.
Чтобы использовать это с BufferedInputStream, вы можете сделать
InputStream is = new BufferedInputStream(new FileInputStream(filename));
// read some data or skip to where you want to start.
CountingInputStream cis = new CountingInputStream(is);
GZIPInputStream gzis = new GZIPInputStream(cis);
// read some compressed data
dis.read(...);
int dataRead = cis.counter;