当前位置: 首页 > news >正文

摄影网站免费源码wordpress浏览量修改

摄影网站免费源码,wordpress浏览量修改,wap网站不流行,基础建设期刊目录 文件操作相关类 序列化机制相关类 序列化机制使用 序列化机制执行过程 序列化类对象 文件操作相关类 CFile#xff1a;文件操作类#xff0c;封装了关于文件读写等操作#xff0c;常见的方法#xff1a; CFile::Open#xff1a;打开或者创建文件CFile::Write/…目录 文件操作相关类 序列化机制相关类 序列化机制使用 序列化机制执行过程 序列化类对象 文件操作相关类 CFile文件操作类封装了关于文件读写等操作常见的方法 CFile::Open打开或者创建文件CFile::Write/Read写/读文件CFile::Close关闭文件CFile::SeekToBegin/SeekToEnd/Seek从 开始/结束/任意 位置设置文件读写位置 代码如下 #include afxwin.h #include iostream using namespace std; void File( ){CFile file;// 没有文件就创建然后可读可写file.Open( E:/MFC/Day07/file.txt, CFile::modeCreate|CFile::modeReadWrite );char str[] hello file;file.Write( str, strlen(str) );file.SeekToBegin( );// 设置文件读写位置char buf[256] { 0 };long nLen file.Read( buf, 255 ); // 返回值是实际读到的数据cout buf nLen endl;file.Close(); } int main(){File();return 0; } 序列化机制相关类 序列化作用以二进制流形式读写硬盘文件效率很高。 CFile文件操作类完成硬盘文件的读写操作CArchive归档类完成内存数据的读写操作维护了一个缓冲区 先把数据放到缓冲区再放到硬盘上 序列化机制使用 序列化往硬盘上写数据 创建或打开文件  CFile::Open定义归档类对象  CArchive ar数据序列化(存储/写)  ar数据   把数据读入缓冲区关闭归档类对象释放缓冲区关闭文件 反序列化从硬盘上读取数据。 打开文件  CFile::Open定义归档类  CArchive  ar;数据反序列化(加载/读)  ar变量关闭文档类对象   ar.close()关闭文件    CFile::Close() 代码如下 #include afxwin.h #include iostream using namespace std; void Store( ){//序列化存储、写数据CFile file;file.Open( E:/MFC/Day07/serial.txt, CFile::modeCreate | CFile::modeWrite );CArchive ar(file, CArchive::store, 4096);//归档类对象,维护缓冲区。long age 18;ar age;//将18保存当前指向的位置并向后移动当前指向相应字节数。float score 88.5;ar score;//将88.5保存当前指向的位置并向后移动当前指向相应字节数。CString name zhangsan; ar name;ar.Close( );file.Close( ); } void Load( ){//反序列化加载/读CFile file;file.Open( E:/MFC/day07/serial.txt, CFile::modeRead );CArchive ar( file, CArchive::load, 4096 );//维护一个buff大小4096字节long age;ar age;//当反序列化第一个数据时候内部将文件中所有数据读入ar维护的buff中float score;ar score;//当反序列化后续数据时候不需要到硬盘文件中读取直接到ar维护的buff中读取CString name;ar name;//当反序列化后续数据时候不需要到硬盘文件中读取直接到ar维护的buff中读取ar.Close( );file.Close( );cout age score name endl; } int main(){Store( );Load( );return 0; } 问题数据一共16字节为啥是17个字节 原因首先排除\0如果在内存中会有这个符号但是再硬盘不会有。多出的一个字节是描述字符串大小的。前四个字节是Int后四个字节是float中间一个字节是字符串长度为8 Windows记事本解析文件是按照字符解析所以前面的数字乱码了。 序列化机制执行过程 数据结构 class CArchive { enum Mode; // {store 0,load 1……}BOOL m_nMode; // 访问方式int m_nBufSize; // buff的大小CFile* m_pFile; // 操作的文件对象BYTE* m_lpBufCur; // 当前指向BYTE* m_lpBufMax; // 终止指向BYTE* m_lpBufStart; // 开始指向 } CArchive ar(file, CArchive::store, 4096);  构造函数伪代码如下 CFile file; file.Open( E:/MFC/Day07/serial.txt, CFile::modeCreate | CFile::modeWrite ); CArchive ar(file, CArchive::store, 4096) CArchive::CArchive(file0 4096) {m_nMode CArchive::store; // 0m_pFile file;//“E:/....serial.txt”m_nBufSize 4096;m_lpBufStart new BYTE[m_nBufSize]; // 开辟一块堆内存指向首地址m_lpBufMax m_lpBufStart 4096;m_lpBufCur m_lpBufStart; } 初始时 如何把数据存入缓冲区伪代码如下 long age 18; ar age CArchive::operator(age)//函数内部this为ar {if (m_lpBufCur sizeof(LONG) m_lpBufMax) {Flush();}*m_lpBufCur age;m_lpBufCur sizeof(LONG); } // 把18存入缓冲区并且指针后移4个字节float score 88.5; ar score CArchive::operator(score)//函数内部this为ar {if (m_lpBufCur sizeof(float) m_lpBufMax) {Flush();}*m_lpBufCur score;//88.5 m_lpBufCur sizeof(float); }CString name zhangsan; ar name CArchive::operator(name)//函数内部this为ar {AfxWriteStringLength(ar, 8 ){ar(unsigned char)nLength;//8}Write(name, 8)//函数内部this为ar{memcpy_s(m_lpBufCur, (size_t)(m_lpBufMax - m_lpBufCur), name, 8);m_lpBufCur 8;} } 序列化三个数据后的缓冲区 关闭文档类对象释放缓冲区伪代码把当前数据导入硬盘上再重置当前指向 ar.Close( )//函数内部this为ar {Flush()//函数内部this为ar{file-Write(m_lpBufStart, ULONG(m_lpBufCur - m_lpBufStart)); // 往硬盘写数据m_lpBufCur m_lpBufStart;//重置当前指向} } 如何需要写入4个字节但是只剩3个字节的空间怎么办 会调用flush()把缓冲区的数据写入到硬盘空间再重置当前指针指向。再重新写入数据相当于从头覆盖写入。 序列化执行过程总结 ar对象维护一个缓冲区将各个数据依次序列化(存储)到ar对象维护的缓冲区中并将m_lpBufCur的指针指向移动相应字节如果ar维护的缓冲区不足则将ar维护的缓冲区的数据写入硬盘文件并重置m_lpBufCur为开始指向当关闭ar对象时将ar对象维护的缓冲区数据写入硬盘文件并释放ar对象维护的缓冲区。 反序列化执行过程总结 ar对象维护一个缓冲区当反序列化第一个数据时将文件数据全部读取到ar维护的缓冲区并将第一个数据反序列化到第一个变量并将m_lpBufCur移动相应的字节数依次反序列化每个数据到变量中当关闭ar对象时释放ar维护的缓冲区 序列化类对象 序列化类对象的使用 类必须派生自CObject类内必须添加声明宏  DECLARE_SERIAL(theClass)类外必须添加实现宏   IMPLEMENT_SERIAL(theClass,baseClass,1)类必须重写虚函数 Serialize 当类具备以上四个条件时类对象就可以序列化到文件保存了。 序列化类对象除了要把类对象成员变量还有类对象的信息类对象大小和版本等。 完整测试代码如下 #include afxwin.h #include iostream using namespace std;class CMyDoc : public CDocument{DECLARE_SERIAL( CMyDoc ) public:CMyDoc(int age0, float score0.0, CString name):m_age(age),m_score(score),m_name(name){}int m_age;float m_score;CString m_name;virtual void Serialize( CArchive ar ); }; IMPLEMENT_SERIAL( CMyDoc, CDocument, 1 ) void CMyDoc::Serialize( CArchive ar ){if( ar.IsStoring() ){ar this-m_age this-m_score this-m_name; //序列化基本类型变量 }else{ar m_age m_score m_name;//反序列化基本类型变量} } void Store( ){//序列化存储、写数据CFile file;file.Open(E:/MFC/Day08/serial.txt, CFile::modeCreate|CFile::modeWrite);CArchive ar(file, CArchive::store, 4096);//归档类对象,维护缓冲区。CMyDoc data(18, 88.5, zhangsan);ar data; //序列化对象就是将对象的各个成员变量序列化。ar.Close( );file.Close( ); } void Load( ){//反序列化加载/读CFile file;file.Open( E:/MFC/day08/serial.txt, CFile::modeRead );CArchive ar( file, CArchive::load, 4096 );//维护一个buff大小4096字节CMyDoc* pdata NULL;ar pdata;ar.Close( );file.Close( );cout pdata-m_age pdata-m_score pdata-m_name endl; } int main(){Store( );Load( );return 0; } 测试结果CMyDoc后面是成员变量的数据前面是类对象信息 把 DECLARE_SERIAL( CMyDoc ) 宏展开 再进一步展开宏  _DECLARE_DYNCREATE 更进一步进入 _DECLARE_DYNAMIC 所以可以认为就是动态创建机制宏 实现宏展开 相当于动态创建机制加上一个操作符重载 下断点分析一下类对象序列化执行 伪代码如下 CFile file; file.Open(E:/MFC/Day08/serial.txt, CFile::modeCreate|CFile::modeWrite); CArchive ar(file, CArchive::store, 4096);//归档类对象,维护缓冲区。 CMyDoc data(18, 88.5, zhangsan); ar data operator(ar, const data) {ar.WriteObject(data)//函数内部this为ar{CRuntimeClass* pClassRef data-GetRuntimeClass();//文档类静态变量WriteClass(pClassRef);//将类的相关信息类名/类大小/类版本存入ar维护的buff中(data)-Serialize(ar)//函数内部this为data{ar this-m_age this-m_score this-m_name; //序列化基本类型变量}} }CFile file; file.Open( E:/MFC/day08/serial.txt, CFile::modeRead ); CArchive ar( file, CArchive::load, 4096 );//维护一个buff大小4096字节 CMyDoc* pdata NULL;//???????????? ar pdata operator(ar, pdata) {pdata ar.ReadObject(RUNTIME_CLASS(CMyDoc))//函数内部this为ar{CRuntimeClass* pClassRef ReadClass(RUNTIME_CLASS(CMyDoc),...);//从文件读取 类的相关信息和 RUNTIME_CLASS(CMyDoc)中信息进行比对//如果相同返回RUNTIME_CLASS(CMyDoc),如果不同返回NULLCObject*pOb RUNTIME_CLASS(CMyDoc)-CreateObject();//动态创建CMyDoc类的对象并返回对象地址pOb-Serialize(ar)//函数内部this为刚刚创建的CMyDoc类对象pOb{ar m_age m_score m_name;//反序列化基本类型变量}return pOb;} }
http://www.zqtcl.cn/news/865344/

相关文章:

  • 网站 搜索引擎 提交企业网站必须备案
  • 公司网站主页设计深圳搜索引擎
  • 织梦学校网站中国建设银行官方网站诚聘英才频道
  • 织梦网站去除技术支持网站建设热门吗
  • 手机自助网站建设电商首页设计
  • 个人做电影网站违法吗招标网站哪个好
  • 岱山县网站建设旅游网站制作
  • 深圳建网站三千哪些网站可以做微商品牌宣传
  • 做网站哪些软件比较好个人网站备案幕布
  • 用数据库代码做家乡网站专门做二维码的网站
  • 上海网站开发工程师招聘网网络维护公司需要什么资质
  • 迅速百度网站自然排名wordpress注册密码链接失效
  • 北京安慧桥网站建设金泉网做网站推广
  • 网站建设与管理书威海城乡与住房建设部网站
  • 邯郸网站设计公司设计师公司排名
  • 网站设计广州量计价格多少钱网站建设
  • wordpress做外贸网站hexo wordpress 主题
  • 北京哪家做网站没网站怎么做cpa
  • 企业网站建设jz190关键词检测工具
  • 如何搭建第三方网站网站开发费属于无形资产
  • 河源城乡规划建设局网站常州网站seo
  • 房产网站建设方案项目书传到网站根目录
  • 页面设计网站素材制作个人网站
  • 怎么制作免费建网站cnzz wordpress
  • 网站界面技术方案wordpress开启子目录多站点模式
  • 汕头网站建设推广价格筑龙网官网首页
  • 河北省建设执业资格注册中心网站东莞微网站建设多少钱
  • 企业网站建设功能模块discover wordpress
  • 网站建设结课做诱导网站
  • 网站开发与设计难嘛青州网站建设推广