为了账号安全,请及时绑定邮箱和手机立即绑定

获取可读流的部分范围

获取可读流的部分范围

森栏 2022-09-02 17:02:38
我想在给定ReadableStream的情况下返回一个特定的字节范围。这听起来很容易,但我找不到任何方法来跳过或从流中读取特定数量的字节,因为我们只能读取块。我宁愿不存储任何数据,而只是发送流。听起来我可以使用TransformStream和PipeThrough()来做到这一点。但是我需要一些帮助来包裹我的头脑。示例:给定一个 1000 字节的 ReadableStream,我想返回另一个从字节 300 开始到字节 900 结束的流。我知道这可以很容易地用节点创建ReadableStream()来完成,但我需要在浏览器中运行它,这样它就不能使用node。
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

下面是一些框架代码,可帮助您入门:


function byteRangeTransform(start, end) {

  let bytesSeen = 0;

  return new TransformStream({

    transform(chunk, controller) {

      const chunkStart = bytesSeen;

      const chunkEnd = bytesSeen + chunk.byteLength;

      bytesSeen += chunk.byteLength;

      

      // Six cases:


      // 1. Chunk entirely before start

      if (chunkEnd < start) {

        return;

      }

      

      // 2. Chunk starts before start, ends between start and end

      if (chunkStart < start && chunkEnd >= start && chunkEnd <= end) {

        const slice = /* TODO */;

        controller.enqueue(slice);

        return;

      }

      

      // 3. Chunk starts before start, ends after end

      if (chunkStart < start && chunkEnd > end) {

        // TODO

      }


      // 4. Chunk starts after start, ends between start and end

      // 5. Chunk starts after start, ends after end

      // 6. Chunk starts after end

    }

  });

}


const onlyInRange = originalReadable.pipeThrough(byteRangeTransform(300, 900));


查看完整回答
反对 回复 2022-09-02
  • 1 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信