数据传输三种格式

一般在使用接口传输数据时通常会使用三种数据格式:JSON、XML、YAML
下面详细介绍一些这些数据格式:

JSON (JavaScript Object Notation)

以下是JSON的具体表现形式:
这里写图片描述
JSON是一种轻量级的文本数据交换格式,在语法上与创建JavaScript对象的代码相同,由key|value(键|值)构成。
JSON的优点是:
a.具有自我描述性,易于阅读编写,也易于机器解析与生成
b.使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON
c.非常适用于服务器与JavaScript交互

XML(eXtensible Markup Language)

以下是XML数据的表现形式:
这里写图片描述
XML是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
使用XML:
a.读取XML文档
b.使用XML DOM循环遍历文档
c.读取值并存储与变量

YAML(Yet Another Markup Language)

YAML是一种直观的能够被电脑识别的的数据序列化格式
以下是YAML数据的具体表现形式:
这里写图片描述
YAML的适用范围:
a.由于实现简单,解析成本低,特别适合在脚本语言中使用
b.YAML比较适合做序列化。因为它是宿主语言数据类型直转的。
c.YAML做配置文件也不错。比如Ruby on Rails的配置就选用的YAML。

  • 13
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
struct FOLDERINFO { int fileLength; //记录文件长度 char fileName[128]; //记录文件名 char filePath[512] //记录文件路径 }; 这里需要说明一下,为什么文件名,文件路径不用CString定义,原因是这个结构体我们要发给对方的,但是由于CString长度是不丁长的,导致结构体长度不能确定,从而使程序出错. 下面就是发送方的代码,我已经省去了目录选择和遍历目录的代码: void CMyQQDlg::SendFiles() { CSocket sockClient; sockClient.Create(); //创建Socket CString ip; m_You_IP.GetWindowText(ip); //m_You_IP是IP控件的变量 sockClient.Connect(ip, 11024); // /////////////////////////////////////////////////////////////////// CString fileName; ///////////////////////这是发送方处理目录的代码,如果没有这段代码 fileName=m_fileName; //将只能发送根目录下的文件:) int a=fileName.Find(filepathone); if(a!=2) { fileName=fileName.Right(fileName.GetLength()-a-1); fileName="C:\\"+fileName; } //////////////////////////////////////////////////////////////////////////// CFile myFile; FOLDERINFO myFileInfo; if(!myFile.Open(m_fileName,CFile::modeRead|CFile::typeBinary))//m_fileName是遍历后得到的文件 return ; myFileInfo.fileLength=myFile.GetLength(); //得到文件大小 strcpy(myFileInfo.fileName,myFile.GetFileName()); //得到文件名称 strcpy(myFileInfo.filePath,m_fileName); sockClient.Send(&myFileInfo,sizeof(myFileInfo)); //发送文件信息 myFile.Seek(0,CFile::begin); char m_buf[SIZEFILE]={0}; //缓冲区 CString strError; int num=0; int temp=0; //开始发送 for(;;) { num=myFile.Read(m_buf, SIZEFILE); if(num==0) break; end=sockClient.Send(m_buf, num); temp+=end; } myFile.Close(); sockClient.Close(); return ; } 下面就是接收方的代码: int CMyQQDlg::SaveYouFiles(CSocket &recSo, SOCKADDR_IN &client) { CString fnames; CString filenamepath; static int filescount=0; CString strfileIp,strfileName,strfileLength; char filemes[512]={0};//存文件名字的 int fileLengths=0; FOLDERINFO myFileInfo; recSo.Receive(&myFileInfo,sizeof(FOLDERINFO)); fileLengths=myFileInfo.fileLength; strfileIp.Format(inet_ntoa(client.sin_addr)); strfileName.Format(myFileInfo.fileName); //得到文件名字 strfileLength.Format("%f",myFileInfo.fileLength/1024.0); filenamepath.Format(myFileInfo.filePath); //得到文件路径 int a=filenamepath.ReverseFind(_T('\\'));//这5行代码是用来得到一个例如:\AMD\Intel\ATI\ filenamepath=filenamepath.Left(a+1); //主要是用来建立目录 CString b=filenamepath; a=b.ReverseFind(_T(':')); b=b.Right(b.GetLength()-a-1); filenamepath="files"+b; //所有的文件都存在files文件夹下 CreateDirectory(filenamepath,NULL); //创建目录 strcpy(filemes,filenamepath+strfileName); char bufs[SIZEFILE]={0}; //缓冲SIZEFILE=1024 CFile fs(filemes,CFile::modeCreate|CFile::modeWrite); //存文件 int n=0; //接受的字节数 0表示结束 int temp=0; //开始接收 for(;;) { n=recSo.Receive(bufs,SIZEFILE); //接受 if(n==0) //0表示结束 break; //接受完毕 fs.Write(bufs,n); // fputs(bufs,fp); temp+=n; } fs.Close(); return 0; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值