| 개발 | 일렉트로닉 아츠, 코모도어 |
|---|---|
| 발표일 | 1985년 |
| 포맷 종류 | 컨테이너 포맷 |
인터체인지 파일 포맷(IFF)은 1985년 일렉트로닉 아츠가 (코모도어와 협력하여) 서로 다른 회사가 제작한 소프트웨어 간의 데이터 전송을 원활하게 하기 위해 도입한 일반적인 컨테이너 포맷이다.
IFF 파일에는 표준 파일 확장자가 없다. IFF 파일을 생성하는 많은 시스템에서 운영체제가 파일 형식 메타데이터를 파일 이름과 별도로 저장하기 때문에 파일 확장자는 중요하지 않다. .iff 파일 확장자는 IFF 컨테이너 포맷을 사용하는 ILBM 이미지 파일 형식에 흔히 사용된다.
RIFF는 1991년 마이크로소프트와 IBM이 개발한 포맷으로, X86 마이크로프로세서 아키텍처에 맞추기 위해 바이트 순서를 리틀 엔디안으로 변경한 점을 제외하면 IFF를 기반으로 한다. 애플의 AIFF는 IFF로부터 개발된 빅 엔디안 오디오 파일 포맷이다. TIFF 이미지 파일 형식은 IFF와 관련이 없다.
IFF 파일은 청크들로 구성된다. 각 청크는 사양에서 "Type ID"라고 부르는 것(매킨토시에서는 FourCC이라 불렀으며, 윈도우 개발자들은 FourCC라고 부를 수 있음)으로 시작한다. 그 뒤에는 32비트 부호 있는 정수(IFF 파일 구조의 모든 정수는 빅 엔디안)가 따라오며, 이는 뒤따르는 데이터(청크 내용)의 크기를 바이트 단위로 지정한다. 사양에 각 청크의 명시적 길이가 포함되어 있으므로 파서는 처리할 수 없거나 처리할 필요가 없는 청크를 건너뛸 수 있다.
이 구조는 형식-길이-값(TLV) 표현과 밀접한 관련이 있다.
Type ID가 FORM, LIST, CAT 인 미리 정의된 그룹 청크가 있다. FORM 청크는 레코드 구조와 같으며, Type ID(레코드 유형 표시)와 그 뒤에 레코드 필드를 지정하는 중첩된 청크들을 포함한다. LIST는 일련의 PROP(속성) 청크와 해당 속성이 적용되는 중첩된 그룹 청크를 포함하는 팩토링 구조이다. CAT 은 특별한 의미론이 없는 중첩된 청크들의 모음일 뿐이다. 그룹 청크는 애플리케이션의 필요에 따라 다른 그룹 청크를 포함할 수 있다. 그룹 청크는 단순한 대응물과 마찬가지로 길이 요소를 포함한다. 따라서 그룹을 건너뛰는 것은 간단한 상대적 탐색 작업으로 수행할 수 있다.
청크는 짝수 파일 오프셋에서 시작해야 하는데, 이는 홀수 주소에서 1바이트보다 큰 단위를 주소 지정할 수 없었던 모토로라 68000 프로세서에서의 IFF 기원에 따른 것이다. 따라서 홀수 길이의 청크는 정규 종료 지점 뒤에 소위 "패딩 바이트"를 추가하여 짝수 바이트 경계로 맞춰진다.
IFF 파일의 최상위 구조는 FORM, LIST, CAT 중 정확히 하나의 그룹 청크로 구성되며, 그중 FORM이 단연 가장 흔하다.
각 유형의 청크는 일반적으로 수치 데이터, 텍스트 또는 원시 데이터 등 서로 다른 내부 구조를 가진다. 다른 IFF 파일을 마치 청크인 것처럼 포함하는 것도 가능하며(그들도 4글자와 길이로 구성된 동일한 구조를 가짐을 참고), 일부 포맷은 이를 사용한다. 모든 IFF 파일에 존재할 수 있는 표준 청크로는 AUTH(파일 작성자에 대한 정보를 포함하는 텍스트), ANNO(주석을 포함하는 텍스트, 보통 파일을 생성한 프로그램 이름), NAME(파일 내 작업 이름을 포함하는 텍스트), VERS(파일 버전), (c) (저작권 정보를 포함하는 텍스트) 등이 있다. 또한 여러 포맷에서 공통적으로 사용되는 청크도 있는데, ILBM, ANIM 및 DR2D 파일(그림, 애니메이션 및 벡터 그림)에서 색상 팔레트를 보관하는 CMAP이 그 예이다. 공통 이름은 같지만 다른 데이터를 담고 있는 청크도 있는데, 예를 들어 BODY는 ILBM 파일에서는 이미지를, 8SVX 파일에서는 소리를 저장할 수 있다. 마지막으로 파일 유형별로 고유한 청크들이 있다. IFF 파일을 생성하는 일부 프로그램은 자체 내부 데이터를 청크로 추가하며, 파서가 관심 없는 청크를 건너뛸 수 있기 때문에 동일한 파일을 다른 프로그램에서 문제없이 읽을 수 있는데, 이것이 IFF와 유사한 포맷들의 큰 장점이다.