El formato de archivo de intercambio ( IFF ) es un formato de archivo contenedor digital genérico introducido originalmente por Electronic Arts (en cooperación con Commodore ) en 1985 para facilitar la transferencia de datos entre software producido por diferentes empresas.
Los archivos IFF no tienen ninguna extensión de nombre de archivo estándar . En muchos sistemas que generan archivos IFF, las extensiones de archivo no son importantes porque el sistema operativo almacena los metadatos del formato de archivo por separado del nombre de archivo . La extensión de nombre de archivo se usa comúnmente para el formato de archivo de imagen ILBM , que utiliza el formato contenedor IFF..iff
Resource Interchange File Format es un formato desarrollado por Microsoft e IBM en 1991 que se basa en IFF, excepto que el orden de bytes se ha cambiado a little-endian para que coincida con la arquitectura del microprocesador x86 . El formato de archivo de intercambio de audio (AIFF) de Apple es un formato de archivo de audio big-endian desarrollado a partir de IFF. El formato de archivo de imagen TIFF no está relacionado con IFF.
Un archivo IFF se construye a partir de fragmentos . Cada fragmento comienza con lo que la especificación llama un "ID de tipo" (lo que los desarrolladores de Macintosh llamaron un OSType y los desarrolladores de Windows podrían llamar un FourCC ). A esto le sigue un entero con signo de 32 bits (todos los enteros en la estructura de archivos IFF son big-endian ) que especifica el tamaño de los siguientes datos (el contenido del fragmento) en bytes. [1] Debido a que la especificación incluye longitudes explícitas para cada fragmento, es posible que un analizador pase por alto fragmentos que no puede o no le importa procesar.
Esta estructura está estrechamente relacionada con la representación tipo-longitud-valor (TLV).
Hay fragmentos de grupo predefinidos , con identificadores de tipo FORM
, LIST
y CAT
. [NB 1] Un FORM
fragmento es como una estructura de registro, que contiene un identificador de tipo (que indica el tipo de registro) seguido de fragmentos anidados que especifican los campos de registro. A LIST
es una estructura de factorización que contiene una serie de PROP
fragmentos (de propiedad) más fragmentos de grupo anidados a los que se aplican esas propiedades. A CAT
es simplemente una colección de fragmentos anidados sin semántica especial. Los fragmentos de grupo pueden contener otros fragmentos de grupo, según las necesidades de la aplicación. Los fragmentos de grupo, como sus contrapartes más simples, contienen un elemento de longitud. Por lo tanto, se puede omitir un grupo con una simple operación de búsqueda relativa .
Los fragmentos deben comenzar en desplazamientos de archivo pares, como corresponde a los orígenes de IFF en el procesador Motorola 68000 , que no podía abordar cantidades mayores a un byte en direcciones impares. Por lo tanto, los fragmentos con longitudes impares se "rellenarán" hasta un límite de byte par agregando un denominado "byte de relleno" después de su final regular.
La estructura de nivel superior de un archivo IFF consta exactamente de uno de los fragmentos de grupo: FORM
, LIST
o CAT
, donde FORM
es por lejos el más común.
Cada tipo de fragmento tiene típicamente una estructura interna diferente, que podría ser datos numéricos, texto o datos sin procesar. También es posible incluir otros archivos IFF como si fueran fragmentos (tenga en cuenta que tienen la misma estructura: cuatro letras seguidas de la longitud), y algunos formatos usan esto. Hay fragmentos estándar que podrían estar presentes en cualquier archivo IFF, como AUTH
(que contiene texto con información sobre el autor del archivo), ANNO
(que contiene texto con anotación, generalmente el nombre del programa que creó el archivo), NAME
(que contiene texto con el nombre de la obra en el archivo), VERS
(que contiene la versión del archivo), (c)
(que contiene texto con información de copyright). También hay fragmentos que son comunes entre varios formatos, como CMAP
, que contiene la paleta de colores en archivos ILBM , ANIM y DR2D (imágenes, animaciones e imágenes vectoriales). Hay fragmentos que tienen un nombre común pero contienen datos diferentes, como BODY
, que podría almacenar una imagen en un archivo ILBM y sonido en un archivo 8SVX . Y finalmente, hay fragmentos únicos para su tipo de archivo. Algunos programas que crean archivos IFF les agregan fragmentos con sus datos internos; estos mismos archivos pueden ser leídos posteriormente por otros programas sin ninguna interrupción (porque sus analizadores podrían omitir fragmentos poco interesantes), lo que constituye una gran ventaja de IFF y formatos similares.