Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Membaca Fail Perduaan menjadi Vektor Aksara Tidak Bertanda Dengan Cekap?
Membaca Fail Perduaan yang Cekap menjadi Vektor Aksara Tidak Bertanda
Kaedah Membaca Fail Binari
Untuk membaca fail binari dengan cekap ke dalam vektor aksara yang tidak ditandatangani (std::vector
Kaedah 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>
Kaedah ini membuka fail dan menggunakan file.seekg/file.tellg untuk menentukan saiznya. Ia kemudian memperuntukkan vektor dengan saiz yang sesuai dan membaca data. Walau bagaimanapun, ia memerlukan cast yang jelas untuk char*, yang boleh menyusahkan.
Kaedah 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>
Kaedah ini menggunakan std::istreambuf_iterator untuk berulang aksara fail dan bina vektor, tetapi ia memerlukan penghantaran ke char walaupun vektor menyimpan aksara yang tidak ditandatangani.
Kaedah 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>
Kaedah ini secara langsung menggunakan std::basic_ifstream dengan jenis yang diingini, BYTE, mengelakkan keperluan untuk menghantar.
Operasi Di Sebalik Tabir:
Apabila menggunakan std::istreambuf_iterator, operasi asas melibatkan pembacaan daripada penimbal dalaman fail dan menukar data char kepada jenis yang dikehendaki (BYTE dalam kes ini). Walau bagaimanapun, disebabkan proses penukaran ini, beberapa kebimbangan prestasi mungkin timbul.
Pengoptimuman Prestasi:
Untuk mengoptimumkan prestasi, pertimbangkan:
Atas ialah kandungan terperinci Bagaimana untuk Membaca Fail Perduaan menjadi Vektor Aksara Tidak Bertanda Dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!