바이너리 파일 형식은 데이터를 저장하는 가장 다재다능하고 가장 컴팩트한 수단을 제공하며 QDataStream을 사용하면 바이너리 데이터에 쉽게 액세스할 수 있습니다. 이 섹션의 예제 외에도 4장에서 QDataStream을 사용하여 스프레드시트 파일을 읽고 쓰는 것을 이미 보았으며, Windows 커서 파일을 읽고 쓰는 데 사용하는 21장에서 다시 볼 수 있습니다. 원인은 올바른 디렉토리를 찾지 못하는 원인이 아닐 수 있습니다. 예를 들어 절대 경로가 없어도 파일에서 읽을 수 있지만 파일에 쓸 수 없는 것 같습니다. file.close()는 어디에 쓰나요? 그것에 쓰기 전에, 또는 후? 문서는 전혀 명확하지 않습니다. 실제로 몇 가지 예에서 close()를 전혀 호출하지 않습니다. 아마도 QFile 개체가 파괴될 때 너무 닫히기 때문일 것입니다. 다른 함수가 열리도록 하기 위해 닫아야하는 경우는 어떻습니까? 다음 예제에서는 PySide.QtCore.QTextStream을 사용하여 텍스트 파일 줄을 한 줄씩 읽습니다. 이 파일에는 8가지 색상의 이름이 포함되어 있습니다. 페인팅이 <를 지원하지 않는 경우 컴파일러 오류가 발생합니다. 사용자 지정 형식에 스트리밍 연산자제공의 또 다른 이점은 이러한 형식의 값을 QVariants로 저장할 수 있다는 것입니다. 이 작품은 11장(292쪽)에 설명된 대로 사전에 qRegisterMetaTypeStreamOperators()를 사용하여 형식을 등록하는 것을 제공합니다. 지금까지 우리는 QDataStream::Qt_4_3로 하드 코딩된 스트림 버전으로 데이터를 로드하고 저장했습니다.

이 방법은 간단하고 안전하지만 새 형식이나 업데이트된 형식을 활용할 수 없다는 한 가지 작은 단점이 있습니다. 예를 들어 이후 버전의 Qt에서 QFont에 새 특성을 추가하고(포인트 크기, 패밀리 등) 버전 번호를 Qt_4_3으로 하드 코딩한 경우 해당 특성은 저장되거나 로드되지 않습니다. 두 가지 솔루션이 있습니다. 첫 번째 방법은 파일에 QDataStream 버전 번호를 포함시키는 것입니다. 그 중 하나는 사용자 지정 형식을 사용하는 컨테이너를 스트리밍할 수 있다는 것입니다. 예를 들어 readAll()이 호출되는 줄에서 입력 파일의 전체 내용을 QByteArray로 읽은 다음 출력 파일에 쓸 write() 함수로 전달됩니다. QByteArray에 있는 모든 데이터를 갖는 것은 항목별로 항목을 읽는 것보다 더 많은 메모리가 필요하지만 몇 가지 이점을 제공합니다. 예를 들어 qCompress() 및 qUncompress()를 사용하여 데이터를 압축및 압축 해제할 수 있습니다. qCompress() 및 qUncompress()를 사용하는 대신 메모리가 부족한 대안은 Qt 솔루션의 QtIOCompressor입니다.

Scroll Up