부호 없는 문자 벡터로 효율적인 바이너리 파일 읽기
바이너리 파일 읽기 방법
바이너리 파일을 부호 없는 문자 벡터(std::벡터
방법 1:
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { std::ifstream file(filename, std::ios::binary); std::streampos fileSize = file.tellg(); std::vector<BYTE> fileData(fileSize); file.read((char*) &fileData[0], fileSize); return fileData; }</code>
이 방법은 파일을 열고 file.seekg/file.tellg를 사용하여 크기를 결정합니다. 그런 다음 적절한 크기의 벡터를 할당하고 데이터를 읽습니다. 그러나 char*에 대한 명시적인 캐스트가 필요하므로 불편할 수 있습니다.
방법 2:
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { std::ifstream file(filename, std::ios::binary); return std::vector<BYTE>((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>()); }</code>
이 방법은 std::istreambuf_iterator를 활용하여 반복합니다. 파일의 문자를 생성하고 벡터를 구성하지만 벡터가 서명되지 않은 문자를 저장하더라도 char로 캐스팅해야 합니다.
방법 3:
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { std::basic_ifstream<BYTE> file(filename, std::ios::binary); return std::vector<BYTE>((std::istreambuf_iterator<BYTE>(file)), std::istreambuf_iterator<BYTE>()); }</code>
이 방법은 다음을 직접 사용합니다. 원하는 유형 BYTE가 있는 std::basic_ifstream. 캐스팅이 필요하지 않습니다.
비하인드 작업:
std::istreambuf_iterator를 사용할 때, 기본 작업에는 파일의 내부 버퍼에서 읽고 char 데이터를 원하는 유형(이 경우 BYTE)으로 변환하는 작업이 포함됩니다. 그러나 이러한 변환 프로세스로 인해 일부 성능 문제가 발생할 수 있습니다.
성능 최적화:
성능을 최적화하려면 다음을 고려하십시오.
위 내용은 바이너리 파일을 부호 없는 문자 벡터로 효율적으로 읽는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!