"chunk" --- IFF 청크된 데이터 읽기
**********************************

**소스 코드:** Lib/chunk.py

======================================================================

이 모듈은 EA IFF 85 청크를 사용하는 파일을 읽기 위한 인터페이스를 제공
합니다. [1] 이 형식은 적어도 AIFF/AIFF-C (Audio Interchange File
Format) 와 RMFF (Real Media File Format)에서 사용됩니다. WAVE 오디오
파일 형식은 밀접하게 관련되어 있으며 이 모듈을 사용하여 읽을 수도 있습
니다.

청크의 구조는 다음과 같습니다:

+-----------+----------+---------------------------------+
| 오프셋    | 길이     | 내용                            |
|===========|==========|=================================|
| 0         | 4        | 청크 ID                         |
+-----------+----------+---------------------------------+
| 4         | 4        | 빅 엔디안 바이트 순서로 청크의  |
|           |          | 크기. 헤더는 포함하지 않습니다. |
+-----------+----------+---------------------------------+
| 8         | *n*      | 데이터 바이트. 여기서 *n*은 앞  |
|           |          | 필드에서 주어진 크기입니다.     |
+-----------+----------+---------------------------------+
| 8 + *n*   | 0 또는 1 | *n*가 홀수이고 청크 정렬이 사용 |
|           |          | 된 경우 필요한 패드 바이트      |
+-----------+----------+---------------------------------+

ID는 청크의 유형을 식별하는 4바이트 문자열입니다.

크기 필드(빅 엔디안 바이트 순서를 사용하여 인코딩된 32비트 값)는 청크
데이터의 크기를 제공하며, 8바이트 헤더는 포함하지 않습니다.

일반적으로 IFF 형식의 파일은 하나 이상의 청크로 구성됩니다. 여기에 정
의된 "Chunk" 클래스의 제안 된 사용법은 각 청크의 시작 부분에서 인스턴
스를 만들고 끝까지 도달할 때까지 인스턴스에서 읽는 것입니다. 그다음에
새 인스턴스를 만들 수 있습니다. 파일의 끝에서, 새 인스턴스를 만드는 것
은 "EOFError" 예외로 실패합니다.

class chunk.Chunk(file, align=True, bigendian=True, inclheader=False)

   청크를 나타내는 클래스. *file* 인자는 파일류 객체를 기대합니다. 이
   클래스의 인스턴스가 특별히 허용됩니다. 필요한 유일한 메서드는
   "read()"입니다. "seek()" 와 "tell()" 메서드가 있고 예외를 발생시키
   지 않으면 이것들도 사용됩니다. 이러한 메서드가 존재하고, 예외가 발
   생하면, 객체가 변경되지 않았을 것으로 기대합니다. 선택적 인자
   *align*이 참이면, 청크는 2바이트 경계에서 정렬되는 것으로 가정합니
   다. *align*이 거짓이면 정렬을 가정하지 않습니다. 기본값은 참입니다.
   선택적 인자 *bigendian*이 거짓이면 청크 크기는 리틀 엔디안 순서로
   간주합니다. 이것은 WAVE 오디오 파일에 필요합니다. 기본값은 참입니다
   . 선택적 인자 *inclheader*가 참이면, 청크 헤더에 주어진 크기는 헤더
   의 크기를 포함합니다. 기본값은 거짓입니다.

   "Chunk" 객체는 다음 메서드를 지원합니다:

   getname()

      청크의 이름(ID)을 돌려줍니다. 이것은 청크의 처음 4바이트입니다.

   getsize()

      청크의 크기를 돌려줍니다.

   close()

      닫고 청크의 끝으로 건너뜁니다. 하부 파일을 닫지 않습니다.

   나머지 메서드는 "close()" 메서드가 호출된 후에 호출되면 "OSError"를
   발생시킵니다. 파이썬 3.3 이전에는 "IOError"를 발생시켰습니다. 이제
   는 "OSError"의 별칭입니다.

   isatty()

      "False"를 반환합니다.

   seek(pos, whence=0)

      청크의 현재 위치를 설정합니다. *whence* 인자는 선택 사항이며 기
      본값은 "0"(절대 파일 위치 지정)입니다; 다른 값은 "1"(현재 위치에
      상대적인 탐색)과 "2"(파일의 끝에 상대적인 탐색)입니다. 반환 값이
      없습니다. 하부 파일이 탐색을 허용하지 않으면, 정방향 탐색만 허용
      됩니다.

   tell()

      청크의 현재 위치를 반환합니다.

   read(size=-1)

      청크에서 최대 *size* 바이트를 읽습니다 (*size* 바이트를 얻기 전
      에 read가 청크 끝에 도달하면 덜 읽을 수 있습니다). *size* 인자가
      음수이거나 생략되면, 청크의 끝까지 모든 데이터를 읽습니다. 청크
      의 끝이 즉시 발견되면 빈 바이트열 객체가 반환됩니다.

   skip()

      청크의 끝으로 건너뜁니다. 청크에 대한 모든 추가 "read()" 호출은
      "b''"를 반환합니다. 청크의 내용에 관심이 없으면, 파일이 다음 청
      크의 시작을 가리키도록 이 메서드를 호출해야 합니다.

-[ 각주 ]-

[1] "EA IFF 85" Standard for Interchange Format Files, Jerry Morrison,
    Electronic Arts, 1985년 1월.
