package okio; import java.io.IOException; import java.util.zip.Deflater; /* loaded from: classes2.dex */ public final class DeflaterSink implements Sink { private boolean closed; private final Deflater deflater; private final BufferedSink sink; public DeflaterSink(Sink sink, Deflater deflater) { this(Okio.buffer(sink), deflater); } private void deflate(boolean z) throws IOException { Segment writableSegment; int deflate; Buffer buffer = this.sink.buffer(); while (true) { writableSegment = buffer.writableSegment(1); if (z) { Deflater deflater = this.deflater; byte[] bArr = writableSegment.data; int i = writableSegment.limit; deflate = deflater.deflate(bArr, i, 8192 - i, 2); } else { Deflater deflater2 = this.deflater; byte[] bArr2 = writableSegment.data; int i2 = writableSegment.limit; deflate = deflater2.deflate(bArr2, i2, 8192 - i2); } if (deflate > 0) { writableSegment.limit += deflate; buffer.size += deflate; this.sink.emitCompleteSegments(); } else if (this.deflater.needsInput()) { break; } } if (writableSegment.pos == writableSegment.limit) { buffer.head = writableSegment.pop(); SegmentPool.recycle(writableSegment); } } @Override // okio.Sink, java.io.Closeable, java.lang.AutoCloseable public void close() throws IOException { if (this.closed) { return; } Throwable th = null; try { finishDeflate(); } catch (Throwable th2) { th = th2; } try { this.deflater.end(); } catch (Throwable th3) { if (th == null) { th = th3; } } try { this.sink.close(); } catch (Throwable th4) { if (th == null) { th = th4; } } this.closed = true; if (th != null) { Util.sneakyRethrow(th); } } void finishDeflate() throws IOException { this.deflater.finish(); deflate(false); } @Override // okio.Sink, java.io.Flushable public void flush() throws IOException { deflate(true); this.sink.flush(); } @Override // okio.Sink public Timeout timeout() { return this.sink.timeout(); } public String toString() { return "DeflaterSink(" + this.sink + ")"; } @Override // okio.Sink public void write(Buffer buffer, long j) throws IOException { Util.checkOffsetAndCount(buffer.size, 0L, j); while (j > 0) { Segment segment = buffer.head; int min = (int) Math.min(j, segment.limit - segment.pos); this.deflater.setInput(segment.data, segment.pos, min); deflate(false); long j2 = min; buffer.size -= j2; segment.pos += min; if (segment.pos == segment.limit) { buffer.head = segment.pop(); SegmentPool.recycle(segment); } j -= j2; } } DeflaterSink(BufferedSink bufferedSink, Deflater deflater) { if (bufferedSink == null) { throw new IllegalArgumentException("source == null"); } if (deflater == null) { throw new IllegalArgumentException("inflater == null"); } this.sink = bufferedSink; this.deflater = deflater; } }