抛出这个话题:思考三个问题:
1.理清楚几个概念:什么是大端法小端法,什么是序列化,什么是json,什么是编码
2.json和序列化的关系
3.序列化VS编码
大端小端法:计算机体系结构中一种描述多字节存储顺序的术语,是cpu在内存组织字节的顺序,即内存空间布局,与cpu架构有关。是cpu对操作数的存放方式。只有一种数据占多个字节,才存在存储顺序。在跨平台或者使用tcp/ip传输数据时,一个独立的数据占用存储空间超过一个字节的时候,会涉及到存放这个数据的字节序列的问题,tcp/ip用大端法传输。
序列化:通过转成json(字节数组)解决了字节顺序的问题。序列化解决字节顺序不一致问题,把一个数据结构转换成一个字节数组。
编码解决了:unicode文本--字节(字节已经排过序) 之间的翻译
计算机只处理数据,要处理文本,把文本你转换成数据,使用不一致的字符编码就好比是我们 "拿着英汉词典来翻译西班牙语文章" ,
向文件写入数据, 读取文件时都需要指定编码格式.
默认地, 在读写文件时, 程序会根据当前计算机系统使用的字符编码来确定编码解码时使用的"字典".
解码:在读取硬盘文件的时候, 软件根据当前环境使用的字符集 ("字典")将硬盘上的二进制数据解码 ("翻译") 为unicode数据.
编码:在存储数据到硬盘上的时候, 软件会根据字符集将unicode数据编码为二进制数据.
在网络传输数据的时候, 传递的也都是二进制数据.
ps:
序列化是通常用来描述将一个对象结构转换成一个字节数组(如字符串)过程的规则,即将内存中的占多个字节结构的数据 (如:unicode数据,占用空间多于1个字节,就需要序列化) 变成可存储传输数据(二进制数据) 的过程。
在跨平台或者使用tcp/ip传输数据时,一个独立的数据占用存储空间超过一个字节的时候,会涉及到存放这个数据的字节序列的问题,json的出现,就解决这些问题。也就是序列化。转成json格式,都是字符串(字节数组)格式,字符串的字符,一个字符占1个字节,一个字节一个字节地传输,这就不用操心顺序问题了。
我的感悟:json解决的是多字节存储顺序不一致的问题。大于1个字节的数据类型才有字节顺序问题。
json:对象表示法,脱胎于js语法,一种文本格式,与语言无关,很多语言支持json生成与解析。关于json的语法课已自行百度,json支持的数据类型等等。
PS:当按字节传输时,是涉及不到序列化的。字节顺序:“字节之间的相对顺序”。
思考下:序列化和编码的问题
1. 编码这些应该是针对字符而言的,整形及数值这些是默认二进制编码的。因此,无论是硬盘中还是内存中,虽然存的都是二进制码,但是字符的编码方式可以是utf8,unicode等等。
2. 序列化只是一种将对象写入字节流的方法而已。可以自己去定义对象的拆分和组装,对象中的字符,写入字节流时,可以选择编码方式,其他的数值型的话,可以直接按照默认的二进制码进行序列化。
---------以下为转载------------
作者:飞火流云
来源:优快云
原文:https://blog.youkuaiyun.com/cloudeagle_bupt/article/details/10121223
版权声明:本文为博主原创文章,转载请附上博文链接!
大端小端(Big- Endian和Little-Endian)(转载)
在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领 域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正 确的编/译码从而导致通信失败。目前在各种体系的计算机中通常采用的字节存储机制主要有两种:Big-Endian和Little-Endian,下面先 从字节序说起。
一、什么是字节序
字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。其实大部分人在实际的开 发中都很少会直接和字节序打交道。唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题。
在所有的介绍字节序的文章中都会提到字 节序分为两类:Big-Endian和L