高效的二进制文件读取到无符号字符向量
读取二进制文件的方法
要有效地将二进制文件读入无符号字符向量 (std::vector
方法 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 时,底层操作涉及从文件的内部缓冲区读取并将字符数据转换为所需的类型(在本例中为 BYTE)。但是,由于此转换过程,可能会出现一些性能问题。
性能优化:
要优化性能,请考虑:
以上是如何高效地将二进制文件读入无符号字符向量?的详细内容。更多信息请关注PHP中文网其他相关文章!