public void write(byte[] b, int off, int len) throws IOException { if (len <= 0) { return; } if (!finishedHeader) { // Keep parsing header data until the header is finished. parseHeader(b, off, len); } else { inflater.setInput(b, off, len); } if (!inflater.finished()) { inflateData(); if (inflater.finished() && inflater.getRemaining() > 0) { // Copy bytes left-over from inflater into trailer buffer. int trailerOffsetInInput = len - inflater.getRemaining(); while (trailerOffset < inflater.getRemaining()) { trailerBytes[trailerOffset++] = b[trailerOffsetInInput++]; } } } else { // Inflator has all the input bytes it needs, anything left over is for the tailer fields. if (trailerOffset + len > trailerBytes.length) { outputStream.close(); throw new IOException("Corrupt GZIP trailer, too many trailer bytes (only 8 expected)"); } System.arraycopy(b, off, trailerBytes, trailerOffset, len); trailerOffset += len; } }
public void write(byte[] b, int off, int len) throws IOException { if (len <= 0) { return; } if (!finishedHeader) { // Keep parsing header data until the header is finished. parseHeader(b, off, len); } else { inflater.setInput(b, off, len); } if (!inflater.finished()) { inflateData(); if (inflater.finished() && inflater.getRemaining() > 0) { // Copy bytes left-over from inflater into trailer buffer. int trailerOffsetInInput = len - inflater.getRemaining(); while (trailerOffset < inflater.getRemaining()) { trailerBytes[trailerOffset++] = b[trailerOffsetInInput++]; } } } else { // Inflator has all the input bytes it needs, anything left over is for the tailer fields. if (trailerOffset + len > trailerBytes.length) { outputStream.close(); throw new IOException("Corrupt GZIP trailer, too many trailer bytes (only 8 expected)"); } System.arraycopy(b, off, trailerBytes, trailerOffset, len); trailerOffset += len; } }