in src/main/java/com/twitter/whiskey/net/SpdyStream.java [328:356]
void onData(ByteBuffer data) throws DataFormatException {
if (!data.hasRemaining()) return;
if (!compressed) {
operation.getBodyFuture().provide(data);
} else {
// Set chunk size to twice the next power of 2
assert(data.remaining() < Integer.MAX_VALUE >> 2);
int chunkSize = Integer.highestOneBit(data.remaining()) << 2;
ByteBuffer decompressed = ByteBuffer.allocate(chunkSize);
inflater.setInput(data.array(), data.arrayOffset() + data.position(), data.remaining());
int bytesWritten = 0;
do {
bytesWritten = inflater.inflate(
decompressed.array(), decompressed.arrayOffset() + decompressed.position(), decompressed.remaining());
decompressed.position(decompressed.position() + bytesWritten);
if (inflater.getRemaining() > 0 && !decompressed.hasRemaining()) {
decompressed.flip();
operation.getBodyFuture().provide(decompressed);
decompressed = ByteBuffer.allocate(chunkSize);
}
} while (!inflater.needsInput() && !inflater.finished());
decompressed.flip();
operation.getBodyFuture().provide(decompressed);
assert(inflater.getRemaining() == 0);
}
}