本文不考虑读写结构化的二进制文件,也就是将一些对象序列化成二进制文件的操作,只是考虑纯粹字节的二进制操作。
读入文件用ifstream,写出文件用ofstream,这两种类型,只需要导入<fstream>头文件即可。还有这两种类型都在std命名空间。
读入二进制文件
读二进制文件用std::ios::binary模式打开。
读二进制数据,需要先分配一个空间,然后用下面方法,将read_count数目的字节读入buffer空间中。
read((char *)buffer, read_count)
为了提高效率,避免频繁读入,在内存足够的情况下最好一次把所有数据都读入到内存中。
为了决定需要分配多少空间,需要确定文件大小。
下面的方法采用先把读写位置移动到文件尾部,然后读取此时的文件位置,这就是文件大小。然后又将读写位置移动到文件头部,真正开始读入。
ifstream infile(origin_json_file, std::ios::binary);
infile.seekg(0, std::ios::end); //移动到尾部
int file_size = (int)(infile.tellg());
unsigned char* buff = new unsigned char[file_size];
infile.seekg(0, std::ios::beg); // 移动到头部
infile.read((char*)buff, file_size);
infile.close();
写入二进制文件
写二进制也是用std::ios::binary模式打开,
跟读类似,写的方法
write((const char *)buffer, write_count)
将缓冲区buffer的内容写到文件中,写write_count数目的字节。
ofstream outfile(json_file, std::ios::binary);
outfile.write((const char*)buff, file_size);
outfile.close();