Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengoptimumkan Membaca Fail Perduaan menjadi Vektor Aksara Tidak Bertanda?
Pengoptimuman Pembacaan Fail Perduaan
Untuk membaca fail binari secara optimum ke dalam vektor aksara tidak bertanda, pertimbangkan strategi berikut:
Kaedah 1: Pembinaan Vektor Tersuai
<code class="cpp">std::vector<BYTE> readFile(const char* filename) { std::ifstream file(filename, std::ios::binary); std::streampos fileSize = file.tellg(); file.seekg(0, std::ios::beg); std::vector<BYTE> fileData(fileSize); file.read((char*) &fileData[0], fileSize); return fileData; }</code>
Kaedah ini secara eksplisit mencipta vektor dengan saiz yang betul berdasarkan saiz fail. Walau bagaimanapun, ia menghantar data vektor ke char*, yang tidak diingini.
Kaedah 2: Istreambuf Iterator
<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 lelaran yang membaca data ke dalam penimbal char secara dalaman. Walaupun ia lebih pendek, ia masih memerlukan char iterator walaupun membaca aksara yang tidak ditandatangani.
Kaedah 3: Pengkhususan Ifstream Asas
<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 menggunakan aliran fail input khusus untuk aksara yang tidak ditandatangani. Walau bagaimanapun, ia mungkin tidak sesuai untuk semua kes.
Pengoptimuman
Pertimbangan
Atas ialah kandungan terperinci Bagaimana untuk Mengoptimumkan Membaca Fail Perduaan menjadi Vektor Aksara Tidak Bertanda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!