Если вы можете угадать степень сжатия (разумное ожидание, если данные похожи на другие данные, которые вы уже обработали), то вы можете определить размер произвольно больших файлов (с некоторой ошибкой). Опять же, это предполагает файл, содержащий один поток gzip. Ниже предполагается, что первый размер, превышающий 90% расчетного размера (на основе расчетного отношения), является истинным размером:
estCompRatio = 6.1;
RandomAccessFile raf = new RandomAccessFile(inputFilePath + ".gz", "r");
compLength = raf.length();
byte[] bytes = new byte[4];
raf.read(bytes);
uncLength = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getInt();
raf.seek(compLength - 4);
uncLength = raf.readInt();
while(uncLength < (compLength * estCompRatio * 0.9)){
uncLength += (1L << 32);
}
[установка estCompRatio в 0 эквивалентна @ ответу Александра]