C++ write函数是否在C++;?

C++ write函数是否在C++;?,c++,serialization,binary,C++,Serialization,Binary,假设我们将一个对象写入二进制文件,如下所示: file.write((char*) &object, sizeof(object)) 假设对象具有字符数组和整数类型的私有成员数据(nostd::string) 问题:write函数是否将对象的属性写入ASCII?特别是,对象的私有成员变量是否写为ASCII?有人能确切地指定这个函数的作用吗 write()按原样写入各个字节。不管他们有什么,这就是他们写的。这差不多就是故事的结尾了 因此,如果您的对象包含一个字符数组,该数组包含以ASCI

假设我们将一个对象写入二进制文件,如下所示:

file.write((char*) &object, sizeof(object))
假设对象具有字符数组和整数类型的私有成员数据(no
std::string

问题:
write
函数是否将对象的属性写入ASCII?特别是,对象的私有成员变量是否写为ASCII?有人能确切地指定这个函数的作用吗

write()
按原样写入各个字节。不管他们有什么,这就是他们写的。这差不多就是故事的结尾了

因此,如果您的对象包含一个字符数组,该数组包含以
ASCII
编码的文本,则它将被写入。如果同一个字符数组包含以克林贡语编码的文本,那么您将在文件中获得克林贡语,等等。。。所见即所得。

write()
按原样写入各个字节。不管他们有什么,这就是他们写的。这差不多就是故事的结尾了


因此,如果您的对象包含一个字符数组,该数组包含以
ASCII
编码的文本,则它将被写入。如果同一个字符数组包含以克林贡语编码的文本,那么您将在文件中获得克林贡语,等等。。。所见即所得。

如果流以
二进制模式打开,则不会对数据应用任何翻译

write函数是否将对象的属性写入ASCII

流的
binary
模式表示没有转换。内存中的内容直接写入流,无需修改

特别是,对象的私有成员变量是否写为ASCII

写入整个对象,而不考虑范围(公共、私有或受保护)。代码不会写入流中

有人能确切地指定这个函数的作用吗

确切地说:函数将内存中给定地址处的给定数量的值写入流


因此,对象的所有数据(包括填充)都将写入与内存中的数据匹配的流。

如果流以
二进制模式打开,则不会对数据应用任何转换

write函数是否将对象的属性写入ASCII

流的
binary
模式表示没有转换。内存中的内容直接写入流,无需修改

特别是,对象的私有成员变量是否写为ASCII

写入整个对象,而不考虑范围(公共、私有或受保护)。代码不会写入流中

有人能确切地指定这个函数的作用吗

确切地说:函数将内存中给定地址处的给定数量的值写入流


因此,对象的所有数据(包括填充)将写入与内存中的数据匹配的流。

您可以在两种情况下保存对象的二进制表示:

  • 是平凡的::value
    是真的
  • 文件流是在
    ios::binary
    模式下打开的
因此,字符串或其他容器等非平凡类型将无法工作,因为它们的状态无法从二进制表示中恢复(缺少内存分配)


write()
将对象的所有内容作为二进制数据写入。如果数据是ascii码,则将以ascii码写入,但不需要进行任何转换。如果要写入ascii,必须使用标准流插入器手工进行写入。您可以在两种情况下保存对象的二进制表示:

  • 是平凡的::value
    是真的
  • 文件流是在
    ios::binary
    模式下打开的
因此,字符串或其他容器等非平凡类型将无法工作,因为它们的状态无法从二进制表示中恢复(缺少内存分配)


write()
将对象的所有内容作为二进制数据写入。如果数据是ascii码,则将以ascii码写入,但不需要进行任何转换。如果你想写ascii码,你必须用标准的流插入器
手工写,它只会吐出字节。这些字节可能与ascii编码匹配。或者他们不这样做,世界不会说ascii或指针。也许你可以把它们读回去。或者不发送,视情况而定,不要发送得太远。
write
将写出
对象
中包含的所有数据,包括指向虚拟表的指针。另外,您可以很容易地尝试这个方法,然后查看十六进制转储中的结果文件,以查看实际写入的内容。哦,我应该强调,关于正在写入的虚拟表指针的一点很重要,因为这意味着您永远无法使用简单的
读取
调用来真正读取对象(对应于用于写入对象的简单单个
write
调用)。正确地说,工作序列化并不容易,使用现有库来处理它和所有疯狂的角落案例。它只会吐出字节。这些字节可能与ascii编码匹配。或者它们不匹配,世界上不会说ascii或指针。也许你可以正确地读回它们。或者你不可以,视情况而定,不要发送太远。那
将写出
对象
中包含的所有数据,包括指向虚拟表的指针。此外,您可以很容易地尝试此操作,然后查看十六进制转储中的结果文件,以查看实际写入的内容。哦,我应该强调,关于写入虚拟表指针的一点很重要,因为这意味着您永远无法使用简单的单次
read
调用(对应于用于写入对象的简单单次
write
调用)真正读取对象。正确、有效的序列化并不容易,请使用现有库来处理它,并使用