The next() operator states that it does not buffer, but that it 'samples' the Observable.

http://msdn.microsoft.com/en-us/library/hh211897(v=vs.103).aspx

If it buffered then it would be the same as toEnumerable() (https://github.com/Netflix/RxJava/issues/18).

As each take() call occurs in the Iterator the Observable sequence could keep going and it would "drop them on the floor" without caching them. When the next take() call is made, it would block until an onNext is received, perform it's work, let other onNext values be lost until the next take() occurs.

You can see further evidence of this from this bug report: http://social.msdn.microsoft.com/Forums/en-US/rx/thread/3ecb283e-c665-4df8-82af-904f4e8b0d93/