• Stream概念的理解


    Stream,流,这个概念,类似于水流,是对传输过程的一个抽象。

    我们要把一堆东西从出发地(source)转移到目标地(dest):

    一种方法,一次性把东西全部运过去,这在数量比较少,重量比较轻,时候可以实现。而大多数情况下,这个难以做到。

    比如,有10吨苹果,要一次性运送,这个难度就太大了。于是,就有了第二种方法。

    二种方法,一车一车的运送,每次只运送1000斤,这样持续的运送,一定可以把所有苹果运送到目的地。

    这样 分批次,持续的,进行处理的过程就是流。

    编程语言对流进行了封装,形成Stream对象。这个对象可以表示小批量,连续处理的过程。

    class Stream{
        constructor(){
            this.buffer = [];
        }
    }

    Stream通常会有一个缓冲区,数据一直读入缓存区,满了就可以写出到使用端。缓冲区空了之后,就可以再次读入,满了再次写出,这样循环往复...
    当缓存区足够小,读取与写入速度足够快,用数学里面极限的思想,就可以达到连续不断的效果,形成类似水流,川流不息的效果。
    而计算机中,实际上,不可能完全连续,就算是中间有间隔,也是流的一种,就像是水一滴一滴的流出,也是流。

    Stream封装了连续操作的过程,表现形式,通常是:

    循环中持续读取

    while ((line=bufferedReader.readLine())!= null){
        //持续读取,并处理数据
        System.out.println(line);
        bufferedWriter.write(line);
        bufferedWriter.newLine();
    }

    事件中持续读取

    readStream.on('data', function(chunk) { // 当有数据流出时,写入数据
        if (writeStream.write(chunk) === false) { // 如果没有写完,暂停读取流
            readStream.pause();
        }
    });

    Stream的一些应用场景

    1. 视频播放

    视频动辄几个G,一次载入内存根本不可能,硬件无法承受,网络传输也不可能这么快。一边传输,一边播放,就是典型的流。

    2. 水桶装水

    要将水桶的水加满,如果一次性加满,可能要费很大的力气,并且有扭伤腰的风险。一次用舀子盛一些水,多次加满,可以比较轻松的完成整个工作。
    一个小孩子也可以完成大人的工作。这也是流的一个应用。

  • 相关阅读:
    python_socket
    python_面向对象(其他)+异常处理+单实例
    并发编程——协程
    数据库开发——MySQL——数据类型——非数值类型
    ALGO-1 区间k大数查询
    数据库开发——MySQL——数据类型——数值类型
    BASIC-10 十进制转十六进制
    BASIC-9 特殊回文数
    BASIC-8 回文数
    BASIC-7 特殊的数字
  • 原文地址:https://www.cnblogs.com/mengff/p/12815043.html
Copyright © 2020-2023  润新知