序列化与反序列化
序列化将数据分解成字节流,反序列化是将字节流还原成数据。
为什么要序列化和反序列化?
我认为序列化的主要目的是传输数据和存储数据,将数据转化成二进制字节流然后对数据进行传输和存储。而反序列化则是接收或者读取数据,将二进制字节流转换成数据后得到数据。
大致图:
TCP/IP协议
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
常见序列化协议
- hessian:Hessian是一个轻量级的remoting on http工具,采用的是Binary RPC协议,所以它很适合于发送二进制数据,同时又具有防火墙穿透能力。
- kyro:kryo是一个高性能的序列化/反序列化工具,由于其变长存储特性并使用了字节码生成机制,拥有较高的运行速度和较小的体积。
- protostuff:出自于Google,性能还比较优秀,也支持多种语言,同时还是跨平台的。但protostuff也是有局限性的,较小的数据还是用Java自带序列机制更好。
- 对于Java语言,还是使用kyro比较好。
Java 中的值传递
- 实参(实际参数):用于传递给函数/方法的参数,必须有确定的值。 int i=100;i为实参。
- 形参(形式参数):用于定义函数/方法,接收实参,不需要有确定的值。 public void sun(int a,int b){...};a,b为形参,需要接收值才有值。
- 值传递:方法接收的是实参值的拷贝,会创建副本。
- 引用传递 :方法接收的直接是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参。
序列化难度挺大的,学到一半还回去补TCP/IP协议,常见序列化协议源码看了个大概,了解了一下。感觉知道怎么用就行了吧。Java中只有值传递这块,自我感觉基本上感觉没啥难度,学习过程中的代码都能看懂,就不总结了。