问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据传输格式

发布网友 发布时间:2024-09-25 18:51

我来回答

1个回答

热心网友 时间:2024-10-20 18:24

引子

在现实的开发当中,我们会遇到多个系统与系统之间,项目与项目之间进行数据的交换。在这种情况下,我们要如何来实现呢?

对于我们来说,我们前面其实学到过一些这种交换的手段。比如:所谓的“对象序列化”和“对象的反序列化”。

现在有一个例子:

A程序当中有一个天气对象,里面放上的是今天的天气信息。B程序需要在它的界面上显示今天的天气,但是它又没有手段自己去获取数据,那只能找A程序要。

那A程序如何把这个数据给到B程序呢?A程序可以通过对象的序列化手段,把它的天气对象转成二进制流,然后通过网络把这个流传递给B程序。B程序再通过对象的反序列化手段把接收到的二进制流转回为一个Java对象。但是,这么做的前提条件是A和B都必须是Java程序。

那么,有没有更好的方式可以适应再各种情况下都能够进行数据传递呢?

有!我们来分析一下,在这种情况下,我们要求双方传递的是什么?是数据!而数据就要有数据类型,不同的编程语言的数据类型不一致。但是有一种数据类型可以装入所有的数据,且不引起歧义,且所有的编程语言都拥有,它就是字符串。所以,我们可以使用字符串来进行数据的传递。

比如A程序向B程序传递数据:“晴32度北风2级湿度百分之20”。那么B程序就需要解析这个数据。B如何解析呢?比如它如何获取温度呢?从第2个字符开始取吗?取到第3个字符吗? 人用肉眼看是没有问题的,但是程序不行,它只能根据我们给它的指令来。如果我们给的指令是从第2个字符开始,那么如果信息数据变成"多云25度...."或者"多云转晴28度....."呢?

我们之前解决过这种问题,我们在ATM的项目中使用了分隔符:"zhang3-123456-1000"。其实这个就是我们在定义“协议”!当然,我们定义这个协议不具备通用性,是ATM项目专用的,而且由于数据很简单,所以更不具有共通性。

另*络传输还有一个很重要的要求,那就是传递的数据应该尽量的精简,以达到节约信道的作用。

那么我们需要什么样的协议格式才能满足刚才说的通用性和精简性呢?经过长期的设计和实践的晒选,我们现在在实际应用当中看到还有两种手段:XML 和 JSON。

XML

XML的全称:可扩展标记性语言(eXtensible Markup Language)。 最早XML的提出不是为了用来进行数据传递,而是用来准备替换HTML的。它的目的是允许程序员在开发页面的时候不用使用HTML当中那些固定的标记,而是可以自己扩展自己的符号。比如:<按钮>提交</按钮>。但是,这件事情最终以HTML自身升级,然后XML失败告终。

但是,XML在另一个领域找到它的发展,就是“数据表达”。XML的格式能够非常清晰的表明各种复杂的数据结构,并且由于可扩展性,它还可以允许自定义标记、属性、嵌套关系。所以,它当时称为了“数据表达格式”的首选,并且一直用到现在。主要用于:数据传递(现在受到JSON的威胁)和配置文件。

合法的XML

XML当中最主要掌握它的四种语法。

元素 <元素名></元素名> --- 开始和结束标记 <元素名/> --- 单标记

属性 <元素名 属性名="属性值" 属性名2="属性值2">

文本 <元素名> 文本内容 </元素名>

注释

注意 XML的语法要求比HTML更严格,它要求:

有开始标记,必须要有结束标记;除非写成单标记;

标记与标记必须要有正确的嵌套 --- 如果一个标记包含了另一个标记的开始,就必须包含它的结束;

能且只能有一个根标记。

满足上面所有语法要求的XML,被称为“合法的XML”。合法是指合语法。

有效的XML

光是合法的XML在实际使用的时候还不够,因为同样的信息可能会有不同的XML写法,但都是合法的。

<成都><天气>晴</天气><温度>32</温度><风向>北</风向><湿度>20%</湿度></成都>

也可以写成:

<成都 天气="晴" 温度="32" 风向="北" 湿度="20%"/>

这个时候就需要通讯双方(构造XML数据的人 和 解读XML数据的人 )要统一规范了。而这个规范就是所谓的“文档类型定义”。它规范了这篇XML能够书写哪些标记?标记与标记的嵌套关系?标记当中有没有属性?属性叫什么名字?能够赋什么值?

要满足“文档类型定义”的XML,才能够在实际应用中起到有效的作用---让双方完成正确的数据沟通。

结论:

合法的XML不一定是有效的;

有效的XML一定是合法的。

如何定制XML的“文档类型定义呢”?在目前,有两种方式:DTD 和 Schema。这辆中方式:DTD简单/Schema繁琐;DTD比较粗/Schema细致。

DTD

DTD -- Document Type Definition -- 文档类型定义

它的语法是这样的: <!ELEMENT 元素 ?子元素> 子元素可以用?+*等描述子元素出现的次数;也可以用()对子元素进行分组,然后元素与元素之间用|分隔表示可选,或,分隔表示顺序。

<!ELEMENT 元素 ?#PCDATA> <!ELEMENT 元素 ?EMPTY>

<!ELEMENT 成都 (天气,温度,风向,湿度)> <!ELEMENT 天气 #PCDATA> <!ELEMENT 温度 #PCDATA> <!ELEMENT 风向 #PCDATA> <!ELEMENT 湿度 #PCDATA>

练习:

<书籍><著作><书名><正书名>水浒传</正书名><副书名>105个男人和3个女人的故事</副书名></书名><作者><国籍>明</国籍><姓名>施耐庵</姓名></作者><出版社>中国铁道出版社</出版社><出版年月>1989.10.1</出版年月><页数>850</页数><价格>5.4</价格></著作><著作>......</著作></书籍><!ELEMENT 成都 EMPTY><!ATTLIST 成都 天气 (晴|阴|雨|) #REQUIRED温度 CDATA #REQUIRED风向 CDATA #IMPLED湿度 CDATA #REQUIRED>Schema

是一种替代DTD的新的规范,它本身的语法也是XML的语法,而且定义的内容更加的细致,包括数据类型等,它都有,它的作用同DTD是一样的。

XML的解析

XML根据DTD/Schema书写完毕以后,解读方就要进行读取,获取当中的数据了。

XML的解析方式分两种: 1、DOM解析 DOM解析的思路是把整篇XML文件读取到内存当中,形成一颗完整的文档树。 它会把整篇文档中的所有信息按造对象的方式封装成一个个的节点Node对象,然后再用关联关系让上层和下层节点发生关联。 我们可以通过节点与节点之间的关系,在这颗文档树上进行来回的遍历,从而操作到每一个节点。

2、SAX解析 SAX解析的思路是比如我们要操作"作者"这个元素,那么SAX解析就会把我们的XML内容从上往下读取一遍,一旦遇到“作者”元素那么就会以“事件触发”的方式调用我们的执行代码。

DOM和SAX的区别: 1、DOM解析更适合与小型的XML,SAX适合于大型的XML;

2、DOM解析再形成文档树之后就可以根据节点关系在这颗树上反复来回操作。SAX解析呢,只能够从上往下读取一次,不能回头。

3、大部分的XML解析工具都是两者都会取它们的优势,合并使用。

JSON

JSON -- JavaScript Object Notation -- JS对象简谱。 它是一种轻量级的数据传输格式,现在几乎已经成为在数据传递这个使用场景当中的不二选择。虽然,它的名字当中有JavaScript,但请大家记住:它是一种字符串格式,与任何编程语言无关。任何编程语言都可以用它。

它的名字中为什么带有JS呢?这是因为它的语法起源于JavaScript对象的字面量表示方式。

JSON采用了JS中两种基本的字面量表现形式来构建它的数据: 1、数组形式 “[元素1,元素2,元素3]”

2、对象形式 {"属性名1"=属性值1,"属性名2"=属性2,......}

3、更复杂的数据结构就用它们之间的各种嵌套表示。

比如之前天气的例子: {"城市":"成都","温度":32,"天气":"晴"}

我们可以很明显的感觉到这种JSON格式的数据既可以表现各种丰富的数据结构,同时也比XML更加简洁。 大家只需要掌握住"[]"、"{}"、“,”、“属性名:属性值”

正是由于JSON具有的优势:字符串形式,可以有丰富的数据结构,简洁性,所以现在JSON在做数据传递这个方向的时候是“不二选择”!

那么作为Java程序开发的我们需要掌握什么呢?我们需要掌握的是可以把我们程序中Java对象转成JSON格式的字符串,同时也可以把人家传递过来的JSON格式的字符串转成Java对象。我们把这种操作叫做“JSON的序列化”和“JSON的反序列化”。

当然,这些功能是不需要我们自己去写代码实现的,先人早就写好了,我们只需要调用前人的代码就可以了。

在Java当中,早就定义好了Java和JSON进行转换的规范,然后交给各个公司和开源组织自己去实现。它们实现以后再把它们的类公布出来,免费让我们使用。

在这里,推荐大家使用来自于阿里的FastJson。 需要掌握:

单个Java对象与JSON字符串之间的转换;

集合Java对象与JSON字符串之间的转换。

//1、java对象转JSON字符串 Student stu = new Student("zhang3",23,true, LocalDate.of(2008,5,12));String stuJson = JSON.toJSONString(stu);System.out.println(stuJson); //2、JSON字符串转java对象Student s1 = JSON.parseObject(stuJson,Student.class);System.out.println(s1.getName());//3、List对象转JSON字符串 --- [{},{},{}.....]List<Student> stuLst = new ArrayList<>();stuLst.add(new Student("zhang3",23,true, LocalDate.of(2008,5,12)));stuLst.add(new Student("li4",21,false, LocalDate.of(2006,5,12)));stuLst.add(new Student("wang5",25,false, LocalDate.of(2010,5,12)));String lstJson = JSON.toJSONString(stuLst);System.out.println(lstJson);//4、JSON字符串转回ListList<Student> studentList = JSON.parseArray(lstJson,Student.class);for(Student stu : studentList){System.out.println(stu.getName() + "====" + stu.getAge()); }//5、Map对象转换JSON字符串 --- { 键:{} ,键:{},..... }Map<String, Student> map = new HashMap<>(); map.put("9527",new Student("zhang3",23,true, LocalDate.of(2008,5,12)));map.put("9528",new Student("li4",21,false, LocalDate.of(2006,5,12)));map.put("9529",new Student("wang5",25,false, LocalDate.of(2010,5,12)));String mapJson = JSON.toJSONString(map,true);System.out.println(mapJson);//6、JSON字符串转换回Map对象Map<String,Student> studentMap = JSON.parseObject(mapJson,new TypeReference<Map<String,Student>>(){});System.out.println(studentMap.get("9527").getName());原文:https://juejin.cn/post/7099336432459710478
数据传输格式有哪些

数据传输格式有多种,主要包括文本格式、二进制格式、XML、JSON、CSV等。一、文本格式 文本格式是最为基础的数据传输格式,包括纯文本和富文本。纯文本一般只包含字符信息,如ASCII码;而富文本则可能包含样式、布局等信息。文本格式适用于简单的数据传输,易于阅读和编辑。但其在传输大量数据时可能占用较多...

数据传输格式

它是一种轻量级的数据传输格式,现在几乎已经成为在数据传递这个使用场景当中的不二选择。虽然,它的名字当中有JavaScript,但请大家记住:它是一种字符串格式,与任何编程语言无关。任何编程语言都可以用它。 它的名字中为什么带有JS呢?这是因为它的语法起源于JavaScript对象的字面量表示方式。 JSON采用了JS中两种基本的字...

数据传输中数据位、停止位、起始位有什么区别?

最常用的“数据帧”格式是(n,8,1):1、n的意思是无“奇偶校验”,即起始位;2、8的意思是数据是8位的,即数据位;3、1的意思是1个“停止位”,即停车位。在这种情况下一个数据帧总共包括10位:1个起始位(低电平,用于同步),8个数据位(这是要传送的信息),以及1个停止位(高电平,...

数据交换格式有哪些

数据交换格式有多种。一、常见的数据交换格式 1. XML XML是一种用于存储和传输数据的标准文本格式。它允许数据以结构化的方式进行定义和描述,具有良好的可读性和可维护性。XML广泛应用于不同系统和应用程序之间的数据交换。2. JSON JSON是一种轻量级的数据交换格式,易于阅读和写入。它基于文本,以键值...

mtl是什么格式

MTL格式是一种用于数据存储和传输的多层传输格式。下面是关于MTL格式的 1. MTL格式的基本概念 MTL格式是一种灵活的二进制文件格式,用于存储和传输多种类型的数据。它支持多种数据类型,包括文本、图像、音频和视频等。由于采用了分层的结构,MTL格式能够有效地组织和管理数据,使得数据的存储和传输更加高效...

CSV格式是什么?数据类的文件吗?

CSV格式,全称为逗号分隔值(comma-separated value),是一种常见的数据存储和传输格式。它被广泛应用于数据处理领域,许多数据集的标准格式就包括CSV。对于小型文件,记事本或Excel足以胜任编辑工作,但处理大规模数据时,这些工具可能会导致内存溢出,编辑效率低下。这时,推荐使用Csved这类专门针对大文件处理...

电脑怎么格式化移动硬盘

1、找一台Windows系统的电脑,将移动硬盘接入电脑。2、右键点击“移动硬盘”,在下拉菜单当中选择“格式化”选项。3、在格式化窗口中可以看到硬盘的数据传输格式为NTFS格式,将数据传输格式改为exFAT的硬盘数据传输格式。4、点击格式化后确定即可。格式化操作通常会导致现有的磁盘或分区中所有的文件被清除。

json格式是什么

JSON格式是一种轻量级的数据交换格式。JSON是一种常用的数据格式,它采用键值对的格式来组织数据,易于阅读和写入。JSON格式采用文本格式,因此可以轻松地跨不同的编程语言和平台传输数据。此外,JSON数据可以被JavaScript原生支持,因此在使用JavaScript进行网页开发时,JSON成为了重要的数据传输手段。JSON格式的...

通讯格式和数据格式的区别

在通讯过程中,数据传输以字节为基本单位,多个字节又组合成通讯帧,每个字节的格式被称为数据格式,通讯帧的格式就叫做通讯格式。数据格式定义的是一个字节由哪些位组成,例如8N1数据格式是说一个字节数据有8个数据位,没有校验位,起停各1位。通讯格式(也就是通讯帧格式)定义的是一组数据由哪些字节...

edl是什么格式

EDL格式是一种电子数据交换语言格式。这种格式主要应用于电子产品和相关系统之间数据的传输与交换。EDL主要应用于各种类型的计算机设备和其他电子设备的协同工作,提高了数据传输的一致性和效率。特别是在企业内部的各个系统之间,如生产、物流、财务等系统中,利用EDL格式进行数据的传输与交换已经成为了一种重要...

数据传输格式有哪些 光纤中数据传输的格式是什么 传数据格式 数据传输中的封装格式是什么 数据交换格式有哪些 手机传输请求的资源在使用中 数据传输最多经过多少个设备 网络上传递文件都有哪些格式 数据帧pppoe占几个字节
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
求这张图片的画师和p站ID 贱人是碰不完的,有些人说遇到贱人打死他,可没有几个能那样的人吧 魅族16相机启动异常 除青春痘小妙招 青春痘怎么治好 ...就长了青春痘,可能是因为我经常吃油炸的,比如薯条、鸡翅等热气的东西... 游戏私服是什么意思 湖北省武昌儿童医院怎么走 王者荣耀版本更新后信誉积分会恢复吗 如果一个游戏出了私服,那以前的官服 会面临停服问题吗? 私服的游戏和官服的有什么差别啊,是自己改吗?私服上的玩家数据谁来维护... 璐字和什么字搭配最好 璐字好不好 璐怎么念 璐怎么读 ...这渣配能带的动刺客信条3吗(低配就好。。。)那杀手5呢? ...我的配置能玩使命4.6.8或者杀手5和刺客信条3吗?(悬赏可以加)_百度... ...玩不腻的。我这人三分钟热度,啧啧啧。很容易就厌倦了。 【数学题】杀手5和孤岛危机3还有刺客信条3和孤岛惊魂3按配置从小到大排... 这配置能流畅玩孤岛惊魂3和刺客信条2和杀手5吗?吗? 电脑型号 联想 2017... 笨汗汗斯故事里的好句子? DNS服务器故障怎么解决? 杀手5和刺客信条3哪个配置高?感觉杀手5优化特别好,我最低配置流畅,_百 ... 有么有用着舒服的美容巾呢?买什么牌子的,会比较好? 我的表哥400字 美容巾是什么意思? 洒家始投老种经略相公,做到关西五路廉访使,这段话出自谁之口_百度知... 过年摆什么花的寓意有哪些 过年桌面摆花的寓意是什么 过年客厅摆放什么花最吉利 过年家里摆花有什么寓意 过年家里摆花有哪些寓意 过年摆什么花放在客厅 过年摆哪种花放在客厅 121.Excel关于打印设置 每页打印标题行 Excel页面设置与打印输出技巧一文解决 梦三国我玩着游戏呢 然后退了 有想连上 怎么办 iTunes一直提示“此windows installer软件包有一个问题。 springboot指定扫描包(springboot扫描properties) 苹果手机显示有别人的手机号码,怎么回事? 梦三国 怎么加入到别人正在比赛中的游戏? 梦三国游戏进入之后出现Msang.bin已停止工作,然后游戏就被退出,怎么... iTunes一直提示此windowsinstaller软件包有一个问题 为什么安装itunes是出现这个问题说此windowsinstaller软件包有一... 黄油蛋糕做法 梦三国游戏总是版本不正确,请退出去更新至最新的客户端,再进行登录。怎... ...itunes是出现这个问题?说:此windowsinstaller软件包有一个问题... 安装itunes的时候提示: 此windows Installer软件包有的程序不能运行... itunes错误安装 1000左右的平板电脑推荐,主要看电影,打游戏,上网。 凌晨12点鸡叫民间说法半夜鸡叫有什么说法? ipadmini能不能打电话? 脚臭怎样去根治 我有脚臭用业久泡脚粉已经不臭了,但不知道根治没有 2021最高冷的网名女 霸气独特网名 什么微信号最高冷