【数据传输 1】服务器—>客户端之间的数据类型转换
导读:在做项目的时候,在controller中,将List数据类型转换为了JSON字符串,那么,为什么要将其数据转换为JOSN呢?这样的转换是否是必须的,在这个转换过程中,又经过了那些步骤?注:本篇博客的所有观点,仅代表笔者目前的学习状态。
一、客户端
1.1,为什么转换
当我们看到一个网页,不管是多么复杂和简单的网页, 我们查看其源文件,看到的是一系列的文本内容。那么是不是可以理解为:一个网页,能够解析或者说能够显示的最终画面,是文本型的数据。
所以,问题就来了,当服务器端接收到客户端的请求,去向库里访问数据时,从库里面流出来的数据并不是,或者说并不一定都是文本类型。所以,我们需要将服务器端响应的数据,进行转换为客户端能够解析的数据类型。
1.2,客户端可以解析的数据类型
在客户端可以解析的数据类型,从大体上来说是文本类型。那么再细点说,有XML文件格式的,也有JOSN格式的。那么既然只要是文本类型的,客户端都可以识别读取,我们在做网页的时候,究竟转成哪一种数据类型呢?先来看看XML和JOSN的基本情况:
1.2.1,基本概念
XML(Extensible Markup Language):能够以灵活有效的方式定义管理信息的结构。以XML格式存储的数据不仅有良好的内在结构,而且由于它是W3C提出的国际标准,因而受到广大软件提供商的支持,易于进行数据交流和开发。现有网络管理标准如TMN、SNMP等的管理信息库规范决定了网管数据符合层次结构和面向对象原则,这使得以XML格式存储网管数据也非常自然,易于实现。
JSON(JavaScript Object Notation) :是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
1.2.2,XML和JOSN关系
先吐一下槽,本来是想找个性能测试的工具,来实际测试一下XML和JOSN的解析效率的,但是找了半天没有找到,然后查到了很多关于XML和JOSN解析效率的文章,我个人暂时没有亲身测试过,不过大家都那样讲,目前,我也就那么信。结论:JOSN的解析效率要高于XML。可是,问题就是,既然JOSN要由于XML,为什么XML还没有被淘汰呢?
原因:首先应该清楚他们各自的功用,XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言;可扩展的样式语言(Extensible Style Language,XSL),即XML的样式表语言;以及可扩展链接语言(Extensible Link Language,XLL)。在XML中,更为突出的是XML对于数据的格式定义更为严格,对于规范数据有它不可小觑的优势。其次,XML并不依赖于某一浏览器,而且操作极其简单。最后,XML有着自解析的功能,虽然JOSN也可以实现自解析,但是相对来说,XML有它的优势。
1.2.3,扩展BOSN
既然说JOSN优于XML,那么还有没有更优良的数据解析方式呢,那就是BSON。
BSON(Binary Serialized Document Format):是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。
BSON可以做为网络数据交换的一种存储形式,这个有点类似于Google的Protocol Buffer,但是BSON是一种schema-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想,BSON有三个特点:轻量性、可遍历性、高效性。例子:{"hello":"world"} ,其中"hello"是key name,它一般是cstring类型,字节表示是cstring::= (byte*) "/x00" ,其中*表示零个或多个byte字节,/x00表示结束符;后面的"world"是value值,它的类型一般是string,double,array,binarydata等类型。
二、服务端
ADO.NET 是一组向 .NET Framework 程序员公开数据访问服务的类。 ADO.NET 为创建分布式数据共享应用程序提供了一组丰富的组件。ADO.NET的一个核心组件是:DataSet对象,相当于本地数据库,它与数据库无关的,它和远程数据库连接的桥梁就是.NET数据提供程序。它是由多个表(DataTable)构成,每个表都是一个DataTable对象。那么,当服务器端从库里将数据取出的时候,作为最原始的数据类型大概是:DataTable。可是我们说DataTable的数据传输不符合面向对象的思想,所以,我们将DataTable类型转换为List类型。后来我们又开始使用哈希表等等等。
也就是说,一个简单的从服务器端到客户端的 数据类型转换是:DataTable——List——JOSN。如果说从DataTable—List是为了迎合面向对象的思想,是一种性能结构上的优化,那么从List到JOSN可以说单纯的就是为了网页显示的需要,相对来说就仅仅只是一种功能需求了。
三、总结
那么我们说要将DataTable转换为list格式,它的原因是什么?具体的实现是什么?如果说我们到客户端的 最终形式是JOSN,那么我们又将怎样进行转换呢?当我们将服务器端的数据显示到页面上,我们经历了一个序列化的过程,当我们将数据从页面上发送至服务器请求数据,又经历了一个反序列化的过程。那么,这一个序列化和反序列化的过程是不是必须的呢?
【数据传输 1】服务器—>客户端之间的数据类型转换的更多相关文章
- SQL不同服务器数据库之间的数据操作整理(完整版)
---------------------------------------------------------------------------------- -- Author : htl25 ...
- SQLServer服务器数据库之间的数据操作(完整版)
分类: 数据库开发技术 ---------------------------------------------------------------------------------- -- Au ...
- 转载-SQL不同服务器数据库之间的数据操作整理(完整版) .
---------------------------------------------------------------------------------- -- Author : htl25 ...
- 不同服务器数据库之间的数据定时同步到sql server (支持mysql,oracle数据库同步到sql server)
1,在目标数据库新增服务器对象->连接到服务器->新建服务器连接 2,编写数据同步业务PROC ALTER PROC TestProc AS BEGIN --打开完全事物回滚 SET XA ...
- 不同服务器数据库之间的数据操作 sp_addlinkedserver
--创建链接服务器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' exec sp_addlinkedsrv ...
- [转]MYSQL 与 Oracle 之间的数据类型转换
原文地址:http://www.cnblogs.com/guyueyanzi/archive/2010/02/27/1674788.html Table 2-4 Default Data Type M ...
- Mysql与Oracle之间的数据类型转换
MySQL Data Type Oracle Data Type BIGINT NUMBER(19, 0) BIT RAW BLOB BLOB, RAW CHAR CHAR DATE DATE DAT ...
- 异构关系数据库(Sqlserver与MySql)之间的数据类型转换参考
一.SqlServer到MySql的数据类型的转变 编号 SqlServer ToMySql MySql 1 binary(50) LONGBLOB binary 2 bit CHAR(1) bit ...
- 异构关系数据库(Sqlserver与Oracle)之间的数据类型转换参考
一.Oracle到SqlServer的数据类型的转变 编号 Oracle ToSqlServer SqlServer 1 BINARY_DOUBLE VARCHAR(100) real 2 BINAR ...
随机推荐
- Android Studio编译开源项目(含NDK开发)常见报错
1.未设置NDK的路径 Error:Execution failed for task ':library:ndkBuild'. > A problem occurred starting pr ...
- [转]Android专家级别的面试总结
Android专家级别的面试总结 2017年02月15日 16:56:28 阅读数:1225 1.. 自定义View流程 onMeasure, onLayout, onDraw, 采用深度优先,因为必 ...
- 【学习笔记】深入理解js原型和闭包(12)——简介【作用域】
提到作用域,有一句话大家(有js开发经验者)可能比较熟悉:“javascript没有块级作用域”.所谓“块”,就是大括号“{}”中间的语句.例如if语句: 再比如for语句: 所以,我们在编写代码的时 ...
- 【Jenkins】Jenkins配置从节点,实现远程主机调用功能
一.需求 使用Jenkins进行持续集成部署过程中,需要用到远端主机的处理功能.如部署到远程主机.文件备份等功能 二.思路 1.当远端主机为Linux系统时使用Publish Over SSH Plu ...
- android 图片叠加效果——两种方法的简介与内容 ,带解决Immutable bitmap passed to Canvas constructor错误
第一种是通过canvas画出来的效果: public void first(View v) { // 防止出现Immutable bitmap passed to Canvas constructor ...
- 简单修改BOOK主题样式
body{ font-size: 13px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; margin: 0px; word ...
- 实用工具特别推荐 BGInfo
https://docs.microsoft.com/en-us/sysinternals/downloads/bginfo 介绍 您在办公室中走过多少次,需要点击几个诊断窗口,提醒自己其配置的重要方 ...
- 工作笔记:复制文件--从windows到ubuntu,再到fedora
最近在测试跨平台类库,于是写了一些小程序. 当然主要利用vs进行主要的代码开发.eclipse进行linux的调试. 那么需要不时同步项目文件. 考虑到项目简单,所以没有使用svn. 1. 从wind ...
- Android(java)学习笔记164:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例)
1.首先我们看看下面这个需求: 这里我们在A界面上,点击这个按钮"选择要发送的短信",开启B界面上获取网络上各种短信祝福语,然后B界面会把这些网络祝福语短信发送给A界面到" ...
- centos下升级python
1. wget http://www.python.org/ftp/python/3.3.0/Python-3.3.0.tgz 2.解压之后 tar -xzvf Python-3.3.0.tgz 3 ...