Funciones de archivo y flujo de datos
La clase QIODevice es la clase de interfaz base de todos los dispositivos de E/S en Qt Core. QIODevice proporciona tanto una implementación común como una interfaz abstracta para dispositivos que soportan la lectura y escritura de bloques de datos. El dispositivo puede ser un búfer de memoria, un archivo o un flujo de datos.
Algunas subclases como QFile se han implementado utilizando un búfer de memoria para el almacenamiento intermedio de datos. Esto acelera los programas reduciendo las operaciones de lectura/escritura. El almacenamiento intermedio hace que funciones como getChar() y putChar() sean rápidas, ya que pueden operar en el búfer de memoria en lugar de hacerlo directamente en el propio dispositivo.
La clase QFile proporciona funciones para leer y escribir en archivos. Un QFile puede ser utilizado por sí mismo o, más convenientemente, con un QTextStream o QDataStream.
QBuffer permite acceder a un QByteArray utilizando la interfaz QIODevice. El QByteArray se trata como un fichero estándar de acceso aleatorio. Un ejemplo:
QBuffer buffer; char ch; buffer.open(QBuffer::ReadWrite); buffer.write("Qt rocks!"); buffer.seek(0); buffer.getChar(&ch); // ch == 'Q' buffer.getChar(&ch); // ch == 't' buffer.getChar(&ch); // ch == ' ' buffer.getChar(&ch); // ch == 'r'
Llame a open() para abrir el búfer. Luego llame a write() o putChar() para escribir en el buffer, y read(), readLine(), readAll(), o getChar() para leer de él. size() devuelve el tamaño actual del buffer, y puedes buscar posiciones arbitrarias en el buffer llamando a seek(). Cuando hayas terminado de acceder al buffer, llama a close().
La clase QDataStream proporciona serialización de datos binarios a un QIODevice. Un flujo de datos es un flujo binario de información codificada que es 100% independiente del sistema operativo del ordenador anfitrión, de la CPU o del orden de los bytes. Por ejemplo, un flujo de datos escrito por un PC con Windows puede ser leído por un Sun SPARC con Solaris. También puede utilizar un flujo de datos para leer/escribir datos binarios sin codificar.
Para más detalles sobre los tipos de datos que QDataStream puede serializar, ver Serializing Qt Data Types.
La clase QTextStream proporciona una cómoda interfaz para leer y escribir texto. QTextStream puede operar sobre un QIODevice, un QByteArray o un QString. Utilizando los operadores de flujo de QTextStream, puede leer y escribir convenientemente palabras, líneas y números. También es habitual utilizar QTextStream para leer la entrada de la consola y escribir la salida de la consola.
Hay tres formas generales de utilizar QTextStream al leer archivos de texto:
- Trozo a trozo, llamando a readLine() o readAll().
- Palabra por palabra. QTextStream admite la transmisión en QStrings, QByteArrays y buffers char*. Las palabras están delimitadas por espacios y los espacios en blanco se omiten automáticamente.
- Carácter por carácter, transmitiendo a QChar o a tipos char. Este método se utiliza a menudo para gestionar la entrada de forma cómoda al analizar archivos, independientemente de la codificación de caracteres y de la semántica de fin de línea. Para omitir los espacios en blanco, llame a skipWhiteSpace().
QByteArray puede utilizarse para almacenar tanto bytes en bruto (incluyendo \0) como cadenas tradicionales de 8 bits '\0'-terminadas. Usar QByteArray es mucho más conveniente que usar const char *. Siempre garantiza que los datos van seguidos de un terminador '\0', y utiliza clases compartidas implícitamente (copy-on-write) para reducir el uso de memoria y evitar la copia innecesaria de datos.
Además de QByteArray, Qt también proporciona la clase QString para almacenar datos de cadena. Para la mayoría de los propósitos, QString es la clase más apropiada. Almacena caracteres Unicode de 16 bits. Es, sin embargo, una buena idea usar QByteArray cuando necesites almacenar datos binarios sin procesar, y cuando la conservación de memoria sea crítica (por ejemplo, con Qt for Embedded Linux).
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.