我想知道使用fstream加载/保存某种类型结构的数组是否是一个好主意。注意,我说的是加载/保存到二进制文件。我应该加载/保存自变量,如int,float,boolean而不是结构吗?我之所以这样说是因为我听说过一个结构可能有某种类型的填充可能会抵消保存/加载。
答案 0 :(得分:2)
结构可能包含填充,该填充将写入文件。如果要在同一平台上回读文件,使用由写入的同一编译器发出的代码,这没什么大不了的。但是,这很难保证,如果你不能保证,你通常应该以某种文本格式编写数据,例如XML,json等等。
答案 1 :(得分:1)
如果没有序列化,您的二进制数据将无法在不同平台(和编译器)之间移植。因此,如果您需要可移植性,则需要先将数据序列化,然后将其作为二进制文件存储在文件中。
看看这些:
答案 2 :(得分:0)
它没有被弃用(它不是任何正式规范的一部分,它应该在哪里被弃用?),但它非常不便携,可能是最糟糕的串行化方法。使用Boost.Serialization或类似的库。
答案 3 :(得分:0)
正如你在答案中所指出的那样,以这种方式编写结构会发生这种情况。如果您希望您的文件可以跨平台移植,例如在Linux i686上编写的文件由Solaris在Sparc上打开,然后甚至编写单独的float也行不通。
尝试将数据写入文本或XML之类的内容,然后压缩/ tar文件以生成一个文档。
答案 4 :(得分:0)
正如尼尔所说,更喜欢文本的数据表示。 XML格式可能过度。更简单的版本是逗号分隔值(CSV)和每个文本行一个值。