第四日学习笔记

92 阅读2分钟

序列化与反序列化

序列化将数据分解成字节流,反序列化是将字节流还原成数据。

为什么要序列化和反序列化?

我认为序列化的主要目的是传输数据和存储数据,将数据转化成二进制字节流然后对数据进行传输和存储。而反序列化则是接收或者读取数据,将二进制字节流转换成数据后得到数据。

大致图:

java TreeMap平衡树添加节点流程图.png

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中只有值传递这块,自我感觉基本上感觉没啥难度,学习过程中的代码都能看懂,就不总结了。