Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

140
Views
Cómo limitar el tamaño de cada lectura de un ReadableStream

Estoy accediendo a un archivo desde el almacenamiento de mi dispositivo usando la entrada de archivo HTML y luego leo ese archivo como una secuencia.

  • ¿Hay alguna forma integrada de limitar la longitud de cada lectura a un número específico de bytes?
 const stream = myFile.stream() const reader = stream.getReader(); //actually I use this each time I want to read more data from the stream reader.read().then(function({ done, value }) { const bufferSizeInBytes = value.length // I want to limit this to 1000 bytes as max value })

Otra pregunta que me confunde, ¿por qué obtenemos un tamaño diferente del búfer en cada lectura? ¿Depende de la memoria o la CPU disponibles o cómo funciona realmente? si depende de la memoria, podríamos leer todo el flujo en una sola lectura, ya que el archivo tiene alrededor de 100 mb y mi memoria disponible es de alrededor de 6 GB, pero en realidad tomó muchas lecturas, lo que me hizo pensar que la memoria no es la único factor detrás de esta operación.

cualquier ayuda sería muy apreciada.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

No, actualmente no puede controlar el tamaño del fragmento del lector del flujo de archivos predeterminado, puede intentar transformarlo en un ByteStream, luego use stream.getReader({ mode: 'byob' }) para obtener un lector BYOB para controlar el tamaño de lectura límite.

Más información: https://web.dev/streams/

about 4 years ago · Juan Pablo Isaza Report

0

Una forma es crear un ReadableStream intermedio que tendrá un búfer, una vez que el búfer exceda el tamaño de chunkSize deseado, luego se pone en cola (o si estamos en la última parte y solo queda una parte que es <tamaño de fragmento).

Como esto:

 const reader = readable.getReader(); const chunkSize = 1 * 1024 * 1024 // 1MB let buffer: Uint8Array; const readableWithDefinedChunks = new ReadableStream({ async pull(controller) { let fulfilledChunkQuota = false; while (!fulfilledChunkQuota) { const status = await reader.read(); if (!status.done) { const chunk = status.value; buffer = new Uint8Array([...(buffer || []), ...chunk]); while (buffer.byteLength >= chunkSize) { const chunkToSend = buffer.slice(0, chunkSize); controller.enqueue(chunkToSend); buffer = new Uint8Array([...buffer.slice(chunkSize)]); fulfilledChunkQuota = true; } } if (status.done) { fulfilledChunkQuota = true; if (buffer.byteLength > 0) { controller.enqueue(buffer); } controller.close(); } } }, });
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!