美文网首页
Nodejs缓冲区

Nodejs缓冲区

作者: Lnevan | 来源:发表于2021-04-03 10:08 被阅读0次

    Stream文件流

    • 文件特别大时,同步会阻塞程序,异步会等待结果,所以引入流的概念。
    • 流的概念,就跟水流一样。比如在看电影时,电影的资源并不是一瞬间就下载到我们客户端中的,而是一点一点过来的。在理想状态下,读一部分,就写一部分,在时间允许情况下,总会处理完。
    • 管道流(pipe):把文件比作装水的桶,而水就是文件里的内容,我们用一根管子(pipe)连接两个桶使得水从一个桶流入另一个桶,这样就慢慢的实现了大文件的复制过程。

    Buffer(缓冲区)

    • 为什么要使用Buffer?
      • 因为javascript中的字符串是以utf-8的格式存储的,处理二进制的能力很弱,而网络层对于不同资源的请求和响应都是用二进制的形式来交互的。
    • 数据流是从一个地方向另一个地方传输数据的过程,通常情况下,我们传输数据往往是为了处理它,或者读它,或者基于这些数据做处理等。
    • 如果处理数据的时间比到达的时间快,而这一时刻仅仅到达了一小部分数据,那这小部分数据需要等待剩下的数据填满,然后再送过去统一处理。
    • 这个”等待区域”就是buffer! 它是你电脑上的一个很小的物理地址,一般在RAM中,在这里数据暂时的存储、等待,最后在流(stream)中,发送过去并处理。
    • 当你看在线视频时,当你网络连接很慢,当处理完当前的数据后,你的播放器就会暂停,或出现”缓冲”(buffer)字样,意思是正在收集更多的数据,或者等待更多的数据到来,才能下一步处理。当buffer装满并处理好,播放器就会显示数据,也就是播放视频了。在播放当前内容的时候,更多的数据也会源源不断的传输、到达和在buffer等待。
    • 如果播放器已经处理完或播放完前一个数据,buffer仍然没有填满,”buffering”(缓冲)字符就会再次出现,等待和收集更多的数据。

    Buffer的操作

    // 创建一个长度为 10、且用 0 填充的 Buffer。
    const buf1 = Buffer.alloc(10);
    
    // 创建一个长度为 10、且用 0x1 填充的 Buffer。 
    const buf2 = Buffer.alloc(10, 1);
    
    // 根据内容直接创建buffer
    
    const buf3 = Buffer.from("hello buffer");
    
    buf1.toJSON()
    // 一个空的buffer
    
    buf3.toJSON()
    // { type: 'Buffer',data: [ 104, 101, 108, 108, 111, 32, 98, 117, 102, 102, 101, 114 ] }
    // the toJSON() 方法可以将数据进行Unicode编码并展示
    buf3.length //12 根据数据自动盛满并创建
    
    //写入数据到buffer
    buf1.write("Buffer really rocks!")
    
    //解码buffer
    buf1.toString() // 'Buffer rea'
    //因为buf1只能承载10个字节的内容,所有多处的东西会被截断
    

    参考文章:https://blog.csdn.net/qq_34629352/article/details/88037778

    相关文章

      网友评论

          本文标题:Nodejs缓冲区

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