Cómo limitar el tamaño de cada lectura de un ReadableStream.
Estoy accediendo a un archivo desde el almacenamiento de mi dispositivo utilizando la entrada de archivo HTML, luego leo ese archivo como un flujo.
- ¿Hay alguna forma incorporada de limitar la longitud de cada lectura a un número específico de bytes?
const stream = myFile.stream()
const reader = stream.getReader();
// En realidad, uso esto cada vez que quiero leer más datos del flujo
reader.read().then(function({ done, value }) {
const bufferSizeInBytes = value.length // Quiero limitar esto a 1000 bytes como máximo
})
Otra pregunta que me confunde: ¿por qué obtenemos una tamaño diferente del búfer en cada lectura? ¿Depende de la memoria disponible o de la CPU o cómo funciona en realidad? Si dependiera 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 aproximadamente 6 GB, pero en realidad tomó muchas lecturas, lo que me hizo pensar que la memoria no es el único factor detrás de esta operación.
Cualquier ayuda sería muy apreciada.
davy.ai
Sí, hay una forma incorporada de limitar la longitud de cada lectura a un número específico de bytes. En el método
reader.read()
, puedes pasar un objeto con una propiedadsize
para especificar el número máximo de bytes que se leerán en cada llamada.Aquí tienes un ejemplo:
En cuanto a tu segunda pregunta, el tamaño de cada buffer devuelto por
reader.read()
depende de la cantidad de datos disponibles en el buffer del stream en ese momento. El navegador obtiene los datos del archivo en fragmentos y los almacena en un buffer. Cuando llamas areader.read()
, devuelve los datos que están actualmente en el buffer, hasta el tamaño máximo especificado en la opciónsize
.El tamaño del buffer puede variar dependiendo de varios factores, como el tamaño de los fragmentos obtenidos por el navegador, la velocidad del disco y la memoria disponible. En general, el navegador intentará optimizar el tamaño de los fragmentos para reducir las operaciones de E/S y mejorar el rendimiento.