src/main/java/io/reactivex/Observable.java
@CheckReturnValue
    @SchedulerSupport(SchedulerSupport.CUSTOM)
    public final <U extends Collection<? super T>> Observable<U> buffer(
            long timespan, TimeUnit unit,
            Scheduler scheduler, int count,
            Callable<U> bufferSupplier,
            boolean restartTimerOnMaxSize) {
        ObjectHelper.requireNonNull(unit, "unit is null");
        ObjectHelper.requireNonNull(scheduler, "scheduler is null");
        ObjectHelper.requireNonNull(bufferSupplier, "bufferSupplier is null");
        ObjectHelper.verifyPositive(count, "count");
        return RxJavaPlugins.onAssembly(new ObservableBufferTimed<T, U>(this, timespan, timespan, unit, scheduler, bufferSupplier, count, restartTimerOnMaxSize));
    }
@CheckReturnValue
    @SchedulerSupport(SchedulerSupport.CUSTOM)
    public final <U extends Collection<? super T>> Observable<U> buffer(
            long timespan, TimeUnit unit,
            Scheduler scheduler, int count,
            Callable<U> bufferSupplier,
            boolean restartTimerOnMaxSize) {
        ObjectHelper.requireNonNull(unit, "unit is null");
        ObjectHelper.requireNonNull(scheduler, "scheduler is null");
        ObjectHelper.requireNonNull(bufferSupplier, "bufferSupplier is null");
        ObjectHelper.verifyPositive(count, "count");
        return RxJavaPlugins.onAssembly(new ObservableBufferTimed<T, U>(this, timespan, timespan, unit, scheduler, bufferSupplier, count, restartTimerOnMaxSize));
    }
Returns an Observable that emits buffers of items it collects from the source ObservableSource. The resulting
ObservableSource emits connected, non-overlapping buffers, each of a fixed duration specified by the
{@code timespan} argument as measured on the specified {@code scheduler}, or a maximum size specified by
the {@code count} argument (whichever is reached first). When the source ObservableSource completes, the resulting
ObservableSource emits the current buffer and propagates the notification from the source ObservableSource. Note
that if the source ObservableSource issues an onError notification the event is passed on immediately without
first emitting the buffer it is in the process of assembling.
<p>
<img width="640" height="320" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/buffer6.s.png" alt="">
<dl>
<dt><b>Scheduler:</b></dt>
<dd>You specify which {@link Scheduler} this operator will use.</dd>
</dl>

@param <U> the collection subclass type to buffer into
@param timespan
the period of time each buffer collects items before it is emitted and replaced with a new
buffer
@param unit
the unit of time which applies to the {@code timespan} argument
@param scheduler
the {@link Scheduler} to use when determining the end and start of a buffer
@param count
the maximum size of each buffer before it is emitted
@param bufferSupplier
a factory function that returns an instance of the collection subclass to be used and returned
as the buffer
@param restartTimerOnMaxSize if true the time window is restarted when the max capacity of the current buffer
is reached
@return an Observable that emits connected, non-overlapping buffers of items emitted by the source
ObservableSource after a fixed duration or when the buffer reaches maximum capacity (whichever occurs
first)
@see <a href="http://reactivex.io/documentation/operators/buffer.html">ReactiveX operators documentation: Buffer</a>