因为利用QByteArray可以很方便的利用其API对内存数据进行访问和修改, 构建数据库blob字段时必不可少; 那如何向blob内写入自定义的结构体和类
1. 利用memcpy拷贝内存数据
//自定义person结构体
typedef struct
{
int age;
char name[20];
}Person;
//向QByteArray写入多个结构体
void writeStruct()
{
QByteArray ba;
ba.resize(2*sizeof(Person)); //设置容量
//序列化
for(int i=0;i<2;i++)
{
Person p1;
p1.age=10+i;
strcpy(p1.name,"javaeye");
memcpy(ba.data()+i*sizeof(Person),&p1,sizeof(Person)); //指针移动,写入多个数据
}
//还原数据
Person *person=(Person*)ba.data();
qDebug()<age<name;
person++;
qDebug()<age<name;
}
memcpy只能处理字段为基本类型的结构体, 当使用QString name, 我用person->name去访问其值, 程序崩溃; 由此可见,内存数据无法还原构建成QString类. 如果要写入自定的QT类, 只能借助QBuffer了, 通过二进制流写入