阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Node.js stream readable.unshift

      Node.js stream readable.unshift(chunk)

      版本历史

      版本变更
      v8.0.0The chunk argument can now be a Uint8Array instance.
      v0.9.11新增于: v0.9.11
      • chunk < Buffer> || < string> | < any> 要推回可读队列的数据块。 对于非对象模式的流, chunk 必须是字符串、 Buffer 或 Uint8Array。 对于对象模式的流, chunk 可以是任何值,除了 null。

      将数据块推回内部缓冲。 可用于以下情景:正被消费中的流需要将一些已经被拉出的数据重置为未消费状态,以便这些数据可以传给其他方。

      触发 ‘end’ 事件或抛出运行时错误之后,不能再调用 stream.unshift()。

      使用 stream.unshift() 的开发者可以考虑切换到 Transform 流。 详见用于实现流的API。

      // Pull off a header delimited by \n\n
      // use unshift() if we get too much
      // Call the callback with (error, header, stream)
      const { StringDecoder } = require('string_decoder');
      function parseHeader(stream, callback) {
        stream.on('error', callback);
        stream.on('readable', onReadable);
        const decoder = new StringDecoder('utf8');
        let header = '';
        function onReadable() {
          let chunk;
          while (null !== (chunk = stream.read())) {
            const str = decoder.write(chunk);
            if (str.match(/\n\n/)) {
              // 发现头部边界。
              const split = str.split(/\n\n/);
              header += split.shift();
              const remaining = split.join('\n\n');
              const buf = Buffer.from(remaining, 'utf8');
              stream.removeListener('error', callback);
              // 在调用 unshift() 前移除 'readable' 监听器。
              stream.removeListener('readable', onReadable);
              if (buf.length)
                stream.unshift(buf);
              // 现在可以从流中读取消息的主体。
              callback(null, header, stream);
            } else {
              // 继续读取头部。
              header += str;
            }
          }
        }
      }
      

      更多内容请参考:Node.js stream 流,或者通过 点击对应菜单 进行查看;


      目录
      本文目录
      目录