• Qt串行化的输入和输出(使用QDataStream读写QByteArray,对QIODevice直接起作用)


    参考https://lug.ustc.edu.cn/sites/qtguide/

    今天看了一个介绍Qt串行化的介绍,感觉很受益,就记录了下来。

    串行化(Serialization)是计算机科学中的一个概念,它是指将对象存储到介质(如文件、内存缓冲区等)中或是以二进制方式通过网络传输。之后可以通过反串行化从这些连续的字节(byte)数据重新构建一个与原始对象状态相同的对象,因此在特定情况下也可以说是得到一个副本,但并不是所有情况都这样。
    Qt 对这类组合数据的打包方法就叫串行化(Serializing),在 Qt 帮助文档的索引里输入关键词 Serializing 就可以看到关于 Qt 串行化的帮助主题(Serializing Qt Data Types),除了 C++ 基本数值类型,Qt 还对大量自身的类对象做了串行化。串行化得到一个字节数组 QByteArray ,可以直接用于发送。Qt 串行化数据接收就是发送的逆过程,都是通过 QDataStream 流实现。

    下面是一个简单的实现
    [cpp] view plain copy
     
     print?在CODE上查看代码片派生到我的代码片
    1. //qtcodec.cpp  
    2. #include <QDebug>  
    3. #include <iostream>  
    4. #include <QByteArray>  
    5. #include <QDataStream>  
    6.   
    7. using namespace std;  
    8.   
    9. QByteArray TestSerialOut()  
    10. {  
    11.     //数据  
    12.     int nVersion = 1;  
    13.     double dblValue = 125.78999;  
    14.     QString strName = QObject::tr("This an example.");  
    15.     //字节数组保存结果  
    16.     QByteArray baResult;  
    17.     //串行化的流  
    18.     QDataStream dsOut(&baResult, QIODevice::ReadWrite);  //做输出,构造函数用指针  
    19.     //设置Qt串行化版本  
    20.     dsOut.setVersion(QDataStream::Qt_5_0);//使用Qt 5.0 版本流  
    21.     //串行化输出  
    22.     dsOut<<nVersion<<dblValue<<strName;  
    23.   
    24.     //显示长度  
    25.     qDebug()<<baResult.length()<<" "<<qstrlen(baResult.data());  
    26.     //返回对象  
    27.     return baResult;  
    28. }  
    29.   
    30. void TestSerialIn(const QByteArray& baIn)  
    31. {  
    32.     //输入流  
    33.     QDataStream dsIn(baIn); //只读的流,构造函数用常量引用  
    34.     //设置Qt串行化版本  
    35.     dsIn.setVersion(QDataStream::Qt_5_0);//使用Qt 5.0 版本流  
    36.     //变量  
    37.     int nVersion;  
    38.     double dblValue;  
    39.     QString strName;  
    40.     //串行化输入  
    41.     dsIn>>nVersion>>dblValue>>strName;  
    42.   
    43.     //打印  
    44.     qDebug()<<nVersion;  
    45.     qDebug()<<fixed<<dblValue;  
    46.     qDebug()<<strName;  
    47. }  
    48.   
    49. int main()  
    50. {  
    51.     QByteArray ba = TestSerialOut();  
    52.   
    53.     TestSerialIn(ba);  
    54.     return 0;  
    55. }   

    http://blog.csdn.net/guoqianqian5812/article/details/50810154

  • 相关阅读:
    是否可以在tomcat servlet中禁用jsessionid?
    一个屌丝程序猿的人生(一百二十一)
    postman 使用
    【Ubuntu】命令行安装deb安装包
    opencv的cascade分类器源码分析
    Face Detection – OpenCV, Dlib and Deep Learning ( C++ / Python )
    小样本目标检测研究现状
    图像特征提取三大法宝:HOG特征,LBP特征,Haar特征
    搞清楚nand flash和 nor flash 以及 spi flash 和cfi flash 的区别
    xhsell远程vmware ubuntu16.04
  • 原文地址:https://www.cnblogs.com/findumars/p/6375845.html
Copyright © 2020-2023  润新知