Estoy leyendo una secuencia de datos grande usando cadenas de bytes perezosas, y quiero saber si al menos hay más bytes disponibles durante el análisis. Es decir, quiero saber si la longitud de la cadena de bytes es de al menos X bytes.En Haskell, ¿la longitud de llamada en un Lazy ByteString fuerza la cadena completa en la memoria?
¿Llamar a length
dará como resultado que toda la secuencia se cargue, por lo tanto, se pierde el propósito de utilizar la cadena de bytes vago?
En caso afirmativo, el siguiente sería: ¿Cómo saber si tiene al menos X bytes sin cargar todo el flujo?
EDITAR: Originalmente pregunté en el contexto de la lectura de archivos pero entiendo que hay mejores formas de determinar el tamaño del archivo. La última solución que necesito, sin embargo, no debería depender de la fuente de bytesbyg lazy.
Gracias. Entonces la respuesta es sí, ¿usar length cargará toda la cadena en la memoria? – me2
Sí, la longitud obligará a toda la lista y "cargarla". Por lo tanto, la contramedida en forma de "tomar" – ADEpt
Entonces, para ser claros, todos entendemos, sí la longitud forzará la cadena en la memoria, por lo que si llama toma x primero, al menos solo está forzando los primeros x bytes en la memoria. – MtnViewMark