美文网首页RxJava2操作符
RxJava2操作符之“Buffer”

RxJava2操作符之“Buffer”

作者: 坑吭吭 | 来源:发表于2017-04-01 15:13 被阅读127次

    作用

    字面意思:缓冲
    其实就是将要发射的数据封装成多个缓冲区,每次发射一个缓冲区

    示例用法

     Observable.just("one", "two", "three", "four", "five")//创建了一个有5个数字的被观察者
                    // 3 means,  it takes max of three from its start index and create list
                    // 1 means, it jumps one step every time
                    .buffer(3, 1)
                    .subscribe(getObserver());
    

    这里贴一下观察者,为了能更清晰的看到发射出来的内容,我们将每一个item都打印出来

        private Observer<List<String>> getObserver() {
            return new Observer<List<String>>() {
    
                @Override
                public void onSubscribe(Disposable d) {
                    Log.d(TAG, " onSubscribe : " + d.isDisposed());
                }
    
                @Override
                public void onNext(List<String> stringList) {
                    textView.append(" onNext size : " + stringList.size());
                    textView.append(AppConstant.LINE_SEPARATOR);
                    Log.d(TAG, " onNext : size :" + stringList.size());
                    for (String value : stringList) {
                        textView.append(" value : " + value);
                        textView.append(AppConstant.LINE_SEPARATOR);
                        Log.d(TAG, " : value :" + value);
                    }
    
                }
    
                @Override
                public void onError(Throwable e) {
                    textView.append(" onError : " + e.getMessage());
                    textView.append(AppConstant.LINE_SEPARATOR);
                    Log.d(TAG, " onError : " + e.getMessage());
                }
    
                @Override
                public void onComplete() {
                    textView.append(" onComplete");
                    textView.append(AppConstant.LINE_SEPARATOR);
                    Log.d(TAG, " onComplete");
                }
            };
        }
    

    运行结果

    运行结果

    分析

    首先,我们的被观察者里面有五个item,分别是1~5的英文,
    然后看我们的设置 buffer(3,1) ,3为缓冲区大小,1可以理解为指针向后移动的距离
    开始
    (1,2,3)4,5 ->前三个item在缓存区中,分别是1,2,3;然后
    1(2,3,4)5 ->缓冲区向后移动了一位,里面依然是三个item,分别是2,3,4,继续
    1,2(3,4,5)->不解释,继续
    1,2,3(4,5)->这时后面已经没有足够的item来填满缓冲区了,所以这时缓冲区里只能是4,5,继续
    1,2,3,4(5)->好了,这个时候已经不能再向后移动了,因为后面没有值了,这时onComplete

    只有一个例子还不是很好把握这个操作符,下面
    如果我们改成buffer(3,2),会怎么样呢?我直接在这里发答案咯
    (1,2,3)4,5 ->开始还是一样的
    1,2(3,4,5)->这是第二步,直接向后移动了两个单位
    1,2,3,4(5)->直接到了这一步了,怎么样和你理解的一样么?

    buffer(3,2)

    总结

    这个算是稍微有点复杂的操作符了,不知道这种形式大家能不能理解。。
    这个系列只有干货,如果大家有什么好的建议的话欢迎在下面评论。或者觉得我哪里写的不够形象了,同样可以提出来。

    相关文章

      网友评论

        本文标题:RxJava2操作符之“Buffer”

        本文链接:https://www.haomeiwen.com/subject/nwpiottx.html