亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取可讀流的部分范圍

獲取可讀流的部分范圍

森欄 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 關注
  • 83 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號