在我的应用程序中,我必须在二进制文件上编写一些数据结构,其中很多都包含枚举。我应该将枚举转换为可能的最小类型(qint8
)还是应该坚持32位(qint32
)?
它会产生积极或消极的影响吗?我最关心的是速度,而不是空间。
QDataStream& operator<<(QDataStream &out, const Event &event)
{
out << (qint8)event.myEnum;
//Also write other fields...
}
我看到一些帖子建议不要进行这种优化(this和this one),但它们是关于内存而不是磁盘写入。
编辑:澄清一下:使用QDataStream
时,我无法直接编写或读取enum
,我必须将其转换为整数类型。我假设8位是足够的,因为在我的上下文中总会有少于127个值(我也使用-1)。
答案 0 :(得分:2)
使用最小的类型是有帮助的,因为您减少了流数据速率,并且它需要更少的时间和精力(想想移动!)来写出来。如果您的代码生成的数据比磁盘消耗的速度慢,那么如果使用更大的类型,则挂起时间不会发生变化,但是您选择的较大数据类型的能耗仍然会更高。
总的来说,我更担心你的序列化是否是未来的证明 - 确保你的文件版本在适当的级别(例如整个文件的一个版本,或每个子版本的版本,甚至版本)每个结构 - 取决于代码的结构和意义。
答案 1 :(得分:1)
如果您只需要一个字节,那么使用一个字节。 QDataStream
当然可以解决字节解析问题。这没有任何缺点,如果你序列化很多这些对象,你会看到切实的好处。