C++ 在二进制模式下使用格式化IO操作?
在二进制模式下使用格式化IO操作有什么问题吗,特别是当我只处理文本文件时 : 对于二进制文件,使用提取和插入运算符(>)以及诸如getline之类的函数来读取和写入数据是不高效的,因为我们不需要格式化任何数据,而且数据很可能不是按行格式化的 : 通常,对于二进制文件i/o,您不使用传统的面向文本的>运算符!这是可以做到的,但这是一个高级主题 “高级主题”的本质让我质疑这两者的混合。有一个搜索和告诉功能,可以通过打开二进制模式解决。与文本模式相比,在二进制模式下使用>是否存在任何问题,或者如果在二进制模式下打开,是否必须始终使用未格式化IO,我只需要解释没有为我隐式删除/添加的回车(\r),但这就是要解释的全部内容吗 使用二进制格式的格式化IO操作是否有问题 模式,特别是当我只处理文本文件时 我只需要解释不正确的回车(\r) 为我含蓄地删除/添加 如果您想要或需要数据中的C++ 在二进制模式下使用格式化IO操作?,c++,c++11,binary,iostream,C++,C++11,Binary,Iostream,在二进制模式下使用格式化IO操作有什么问题吗,特别是当我只处理文本文件时 : 对于二进制文件,使用提取和插入运算符(>)以及诸如getline之类的函数来读取和写入数据是不高效的,因为我们不需要格式化任何数据,而且数据很可能不是按行格式化的 : 通常,对于二进制文件i/o,您不使用传统的面向文本的>运算符!这是可以做到的,但这是一个高级主题 “高级主题”的本质让我质疑这两者的混合。有一个搜索和告诉功能,可以通过打开二进制模式解决。与文本模式相比,在二进制模式下使用>是否存在任何问题,或者如果在二
\r
,您可能正在处理文本/字符串。为此,您不需要使用二进制文件。尽管您可以在二进制模式下打开文本文件以快速扫描换行符,例如(行数),而无需执行效率较低的readline()
二进制文件用于直接存储二进制值(主要是数字或数据结构),无需将其转换为文本并再次转换为二进制
二进制文件的另一个优点是不需要进行任何解析。您可以直接访问文件中的所有数据(假设数据以结构良好的方式存储)
例如:如果您需要存储每个包含5个32位数字的记录,您可以将这些记录以其本机二进制格式直接写入二进制文件(转换和解析不会浪费时间)。例如,要在以后读取记录nr 1000,您可以直接搜索
位置5 x 4 x(1000-1),然后从那里读取20字节的记录。另一方面,对于文本文件,您需要从文件的开头开始扫描每个字节,直到您计算了1000行(也可能是不同长度的)
您可以直接使用read()
和write()
(或fread()
/fwrite()
)(尽管
也可以用于具有可变长度的对象)
二进制文件也应该有一个包含一些基本信息的头文件。有关这方面的详细信息,请参阅。文件的二进制模式意味着在读取或写入文件时不会发生翻译(ios::binary
)。一种常见的翻译是行尾。这与使用istream::read
和ostream::write
直接读取和写入未格式化数据不同。“二进制文件还应具有包含一些基本信息的头。”在某些情况下。把这作为一条普遍的规则,充其量是乐观的。