RxJava2操作符之“Buffer”

作用

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

示例用法

 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)

总结

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 注:只包含标准包中的操作符,用于个人学习及备忘参考博客:http://blog.csdn.net/maplejaw...
    小白要超神阅读 2,226评论 2 8
  • 作者: maplejaw本篇只解析标准包中的操作符。对于扩展包,由于使用率较低,如有需求,请读者自行查阅文档。 创...
    maplejaw_阅读 45,770评论 8 93
  • 当一个逗比青年突然充满文艺气息…噫~想想就觉得恐怖(啊哈哈哈) 好吧,我就是一个如此二的骚年。今天发来第二弹,偶喜...
    小半步多阅读 231评论 0 0
  • 本帖最后由 m1978xz 于 2017-1-2 08:05 编辑 12月22号种下去的,没用水泡,直接在浸盆过的...
    塔罗右手三知六应阅读 1,470评论 0 51
  • 加油,加油! 向终点冲去, 把别人丢掉。 踏上跑道别害怕, 为我们学校争光。 你代表的不止有你, 有我们班级, 有...
    星动欣醇阅读 285评论 1 5