美文网首页
Buffer 与Stream

Buffer 与Stream

作者: 你飞跃俊杰 | 来源:发表于2021-04-15 11:13 被阅读0次

    一、是什么

    Stream

    流是一组有序的、有起点和终点的字节数据的传输手段。

    Buffer

    用于创建一个专门存放二进制数据的缓存区

    二、为什么会出现

    Stream

    在后端中应用,因为在后端与前端、后端的IO中,很大机会会出现文件太大,不能一次性读取的问题。因此在前端中使用的方法:整体读取后再进行操作,会导致程序的等待时间过长,因此,流操作(stream)便营运而生。
    在readable和writable的Stream之间筑起沟通,如果仅仅使用事件方法来进行的话,代码会显得很冗杂,因此需要出现pipe(管道)方法来进行。

    readable.pipe(writable);
    //返回值为writable的对象
    

    Buffer

    在数据传输过程中,如果需要把其中一段Stream截取并且进行修改查看,则需要Buffer类来进行协助,并且转化成其他的人类可理解对象

    二、怎么样用

    Stream

    Stream 有四种流类型,且所有的 Stream 对象都是 EventEmitter 的实例:

    • Readable – 可读操作。
    • Writable – 可写操作。
    • Duplex – 可读可写操作.
    • Transform – 操作被写入数据,然后读出结果。
      这意味着Stream对象有四种,同时每个Stream对象都有他们对应的事情。

    Buffer

    Buffer的用途:文件传输或者大数据传输
    Buffer的字节管理
    Buffer对象与其他对象的转换
    Buffer的保存

    Stream

    所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:

    • data – 当有数据可读时触发。
    • end – 没有更多的数据可读时触发。
    • error – 在接收和写入过程中发生错误时触发。
    • finish – 所有数据已被写入到底层系统时触发。
    • drain—缓冲区已满

    在文件流读取、写入中,有特定的事件可以提供监听。

    在读取到的二进制Bytes中,如何把字节重新解读成我们需要的数据
    通常传输的文件是图片、音频、视频等文件,中间程序要处理的有(百分比评估、是否传输完成、再一次传输给别的地方等),而不会在传输过程中要求打开修改文件(又不是迅雷那种边下载边看
    setEncoding和Buffer

    前端如何以流的方式发送信息给后端(socket)

    可操作的流:socket、webSocket。
    以socket形式传输的流,前端是可以控制传输的量,并且得到反馈的。例如传输一张图片,用流(二进制)的方式来传输,可以精确到传输的百分比、断点续传等功能。

    一次性的流:http
    HTTP传输的Request和Response,则是一次性后端读取到一系列信息,但是后端在处理的时候,是完全可以用Readable Stream的形式来读取的。

    Scene(应用场景)

    5.1 Stream的使用场景

    大文件传输(不能短期阻塞完成的)
    文件需要多次传输的,使用pipe(防止代码过于冗杂)

    5.2 Buffer的使用场景

    需要操作流的时候(大文件、大量数据)

    断点续传

    1.开始下载。 用NSURLSessionDownloadTask
    2.设置。 上限5,多个的话,速度和性能都不好
    3.切到后台会断
    4.接收, 用NSOutputStream去写入后台传过来的data写入到文件中

    参考:https://blog.csdn.net/hero_wqb/article/details/80407478

    相关文章

      网友评论

          本文标题:Buffer 与Stream

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