片网站无法显示,怎么做网页个人简介,蜂网站开发,香精香料网一、通信的数据传递
在开发程序中#xff0c;无可避免的会进行数据的传递。这种传递方式有很多种#xff0c;字节流、消息、Json、参数以及对象甚至可能的方法。那么在传递这些数据时#xff0c;如何正确的采用更合适的方法#xff0c;就成为了一个设计的首选的问题。
二…一、通信的数据传递
在开发程序中无可避免的会进行数据的传递。这种传递方式有很多种字节流、消息、Json、参数以及对象甚至可能的方法。那么在传递这些数据时如何正确的采用更合适的方法就成为了一个设计的首选的问题。
二、数据传递形式选择的原则
在面对复杂的应用场景和多种多样的传递方式的前提下如何正确的确定自己的通信传递形式是有一些原则可以参考的 1、准确性 这是选择的首要原则即准确不能因为因为选择一种方式导致过多的中间环节产生问题。最简单的一种例子就是在函数参数的通信中把有符号和无符号互相传递这极有可能出现问题而且不容易发现。另外不能让开发者产生歧义这也是准确性的一种表现即表义要准确。 2、简单性 在准确的基础上用最少的工作量即可实现最为可取。这种简单不只是普通的简单如果有成熟的框架或者有现成的库、类等也称之为简单。
3、可扩展性 也就是灵活性最好这种数据传递起来不会因为一个轻微的新需求导致很复杂或很大量的修改。
4、可维护性 这种其实是前边几种的一种综合要求一般来说简单的就容易维护可扩展性好也容易维护。但又简单又可扩展就不一定好维护了。比如用了一个现有的框架那维护性就未必多高。毕竟一个框架还是需要付出较多的人力成本和时间去学习掌握的。
三、数据传递常见的形式
1、函数间 函数间的数据通信是最常见的一般来说开发者都会采用基本数据类型如int,string等进行数据传递。但这种方式有限制一个是无法传递太多的参数另外一个无法传递一些对象或特定的数据类型如图像等。 那么就可以使用类或结构体来进行传递这种方式可以传递多个对象但编写有些复杂维护成本有所增加。如果需要传递多个相同的基础类型或对象可以使用STL中的一些std::array、std::vector、std::list等进行传递。它们很重而且效率也不多高操作起来相对直接使用对象或基础数据类型要麻烦一些此处不讨论值或引用传递只讨论形式。 但此时又会出现一些问题比如有一些数据是有关联的怎么办可以使用std::pair,std::tuple或者使用std::map等。这种应用就复杂一些而且还有不少细节的小坑如果没有文档辅助可能让后续开发者有些难以入手。 而对于图像或视频、文件这种大的数据类型可以使用二进制流可以用指针操作或者使用json字符串传递一用不建议使用xml进行传递了。这就相当麻烦了除了涉及到数据的流式转换和流的处理外还得考虑内存的分配等额外的情况。所以就得权衡一下利弊了。 2、进线程间 在多进程间一般来说函数间的方法都可以使用但是要注意数据的安全性和生命周期的问题。在早期的程序中还可以通过强制指针的转换通过二进制字节的方式传递void*而大家都知道强制转换是有风险的。而如果采用内存映射等传递的话基本就是二进制字节流的形式了很少时候可以看到以文件的形式进行传递数据其实也是二进流的方式。 3、库接口间 库接口间通信一般也如上面所述但需要注意的是库接口之间可能存在着数据类型不一致的情况转换的一方要保证转换的准确性。 4、框架间 框架间的通信除了上面所述的情况外大多使用的是协议而在协议中一般普通的数据传递都会采用Json字符串或直接传递参数但大数据文件、图像等都会使用流式传递。 5、分布式通信间 分布式通信好多使用的是序列化而序列化本质其实也是二进制流通信。二进制流的缺点导致了序列化的出现即把对象与二进制流间进行正确的互转。同时序列化的成本相当高。而序列化无论是自己开发还是使用框架都使得维护成本大大增加。
四、总结
杀鸡用牛刀这是人们常说的大材小用。可还有一句话叫“狮子搏兔”要尽全力一击。这两个都对其实就是面对不同的场景下开发者的选择问题。既要又要还要那种好事儿谁都想要。结合实际情况哪个更合适自己就用哪个。毕竟有的时候开发程序不单纯是一个技术问题。