在现实生活中通讯都是通过规约(又叫协议)来传输数据的。比如电力行业用的比较多的103规约,modbus规约,楼宇行业的bacnet规约,61850规约等。
是不是必须要有规约呢?
回答是的,不管怎样传输,都要让知道不同的数据的位置信息,所以必须有个某种规定(这种规定就叫做规约吧)。规约给人带来的最大的问题是什么? 解析? 怎样解析规约是一个久远的话题,也是一个新话题。
java中支持序列化(C++ 1x标准中也会支持),什么是序列化?
“对象的序列化是指将对象的状态存储起来,先将对象的字段和属性以及类名转换为字节流,然后再把字节流写入数据流。通过对对象反序列化,得到原对象完全相同的副本。对象的序列化主要的目的是将对象持久化,经过持久化的对象可以从一个地方传输到另一个地方。”
序列化对协议解析有什么帮助? 如果说有了序列化,你等于不用去解析了,相信么? 这里说说原理吧,我没时间说太多。 C++对象模型,不知道大家看了这本书没, 一个c++对象其实包含的就是一些数据,方法并不包含在对象中。也就是说一个c++中的对象其实也就是个数据结构。 如果我们能把一个对象从A客户端发送到B服务器,B服务器接收到这个对象后要有相应的方法就能获取A对象副本中的数据信息(这种获取信息就不用去解析规约了)。就像以前我们盖房子是把材料买,然后组织这些材料,最后做出来个房子。但是现在如果可以把一个对象从一个地方搬到另外一个地方,就等于你要盖房子,但是你不是去买材料,然后建造。而是直接把一个已经建造好的房子通过搬运到你要盖房的地基上。 所以通过序列化我们就可以不用解析就可以获取另外一个设备中的信息。
其实这一切并不难实现,我们看看boogle的protobuf就知道了。 通过序列化把数据打包,然后把打包好的数据搬到另外一个地方,再通过解压(解析,但是这个解析就不用我们手工去解析了)我们就可以获得信息。
打个比方说,在你的C盘中有很多文件夹,每个文件夹下有很多文件。 一天你要重装操作系统,你把这些需要的文件和文件夹通过打包工具打包成一个包含文件的包(假设打包后的文件时 “aaa.zip”)。然后你把这个aaa.zip 拷贝到E盘,再解压aaa.zip你的文件是不是就原封不动的从C盘搬到了E盘?
阅读(608) | 评论(0) | 转发(0) |