android/guava/src/com/google/common/io/ReaderInputStream.java
private void startDraining(boolean overflow) {
    byteBuffer.flip();
    if (overflow && byteBuffer.remaining() == 0) {
      byteBuffer = ByteBuffer.allocate(byteBuffer.capacity() * 2);
    } else {
      draining = true;
    }
  }
private void startDraining(boolean overflow) {
    byteBuffer.flip();
    if (overflow && byteBuffer.remaining() == 0) {
      byteBuffer = ByteBuffer.allocate(byteBuffer.capacity() * 2);
    } else {
      draining = true;
    }
  }
Flips the buffer output buffer so we can start reading bytes from it. If we are starting to
drain because there was overflow, and there aren't actually any characters to drain, then the
overflow must be due to a small output buffer.